There is already an open issue for that in the form of doing something similar for assert_receive but that's actually very complex since the left side is a *pattern* and not a value. So we would need to have a "pattern evaluator" or similar.
*José Valimwww.plataformatec.com.br <http://www.plataformatec.com.br/>Founder and Director of R&D* On Thu, Oct 19, 2017 at 4:16 AM, <[email protected]> wrote: > What would you all think of changing the assert output when the argument > to assert is match?(map, map) so that it shows the difference similar to if > we did an ==, except the extra fields in the right-hand map would be > omitted? This is what we currently see when using "assert match?(%{field1: > "foo", field2: "bar"}, data)": > 1) test map1 (MapPropsalTest) > test/map_propsal_test.exs:10 > match (match?) failed > code: assert match?(%{field1: "foo", field2: "bar", field3: > "not-there"}, map) > right: %{ > field1: "foo", > field2: "bar", > inserted_at: ~N[2017-10-19 02:10:25.254692] > } > stacktrace: > test/map_propsal_test.exs:12: (test) > > How I think it should read instead when the args to match? are both maps : > 2) test map2 (MapPropsalTest) > test/map_propsal_test.exs:15 > match (match?) failed > code: assert match?(%{field1: "foo", field2: "bar", field3: > "not-there"}, map) > left: %{field1: "foo", field2: "bar", <red>field3: "not-there"</red>} > right: %{field1: "foo", field2: "bar"} > stacktrace: > test/map_propsal_test.exs:17: (test) > > I'd be happy to do the work. > > On Wednesday, October 18, 2017 at 8:53:09 AM UTC-5, José Valim wrote: >> >> Use match?/2: >> >> assert match?(%{field1: "foo", field2: "bar"}, data) >> >> >> The operator =~ was designed to focus exclusively on strings and we don't >> plan to relax those constraints. >> >> >> *José Valimwww.plataformatec.com.br >> <http://www.plataformatec.com.br/>Founder and Director of R&D* >> >> On Wed, Oct 18, 2017 at 2:43 PM, <[email protected]> wrote: >> >>> Yes, but that throws a MatchError exception if not satisfied, not a >>> true/false. Ideally, in the assertion results, it would highlight the >>> failing key/values as well. Primarily for testing, but also a quick way to >>> test for the presence of multiple key/values in larger maps. >>> >>> On Wednesday, October 18, 2017 at 12:14:00 AM UTC-5, Andrew Timberlake >>> wrote: >>>> >>>> You can do that with pattern matching, >>>> >>>> assert %{field1: "foo", field2: "bar"} = data >>>> >>>> On 18 Oct 2017, 05:01 +0200, [email protected], wrote: >>>> >>>> I think it would be useful if =~ supported maps. =~ would return true >>>> if the key/values in the right hand map were also contained in the >>>> left-hand map. I think this would be especially useful for testing, as you >>>> could check that the result matched a subset of the map, rather than the >>>> whole map. >>>> >>>> e.g. >>>> data = Repo.insert!(src) >>>> # data = %Data{id: 25, field1: "foo", field2: "bar", inserted_at: >>>> ~N[2017-01-01], updated_at: ~N[2017-01-01]} >>>> assert data =~ %{field1: "foo", field2: "bar"} # true >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "elixir-lang-core" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To view this discussion on the web visit https://groups.google.com/d/ms >>>> gid/elixir-lang-core/7eaabb77-6c7a-4fcb-a74a-fc303f5ace26% >>>> 40googlegroups.com >>>> <https://groups.google.com/d/msgid/elixir-lang-core/7eaabb77-6c7a-4fcb-a74a-fc303f5ace26%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "elixir-lang-core" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To view this discussion on the web visit https://groups.google.com/d/ms >>> gid/elixir-lang-core/fb23650e-c3f4-4694-86e1-62cdc2b9e103% >>> 40googlegroups.com >>> <https://groups.google.com/d/msgid/elixir-lang-core/fb23650e-c3f4-4694-86e1-62cdc2b9e103%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/elixir-lang-core/708c63d3-4dd8-41d3-a5fd- > 2b304f7ccba4%40googlegroups.com > <https://groups.google.com/d/msgid/elixir-lang-core/708c63d3-4dd8-41d3-a5fd-2b304f7ccba4%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4Knh3yvDCTcAYCCvMScFvSLpkP9mOGrhBovFMePtceM2Q%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
