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.

Reply via email to