Giter Site home page Giter Site logo

Comments (10)

christopheradams avatar christopheradams commented on May 4, 2024 4

This may be too obvious, but something like:

Testing

  • When writing ExUnit assertions, be consistent about the order of the expected and actual values under testing. Prefer placing the expected result on the right, unless the assertion is a pattern match.

    # preferred - expected result on the right
    assert actual_function(1) == true
    assert actual_function(2) == false
    
    # not preferred - inconsistent order
    assert actual_function(1) == true
    assert false == actual_function(2)
    
    # required - the assertion is a pattern match
    assert {:ok, expected} = actual_function(3)
    

from elixir_style_guide.

ericmj avatar ericmj commented on May 4, 2024 3

The great thing about the assert macro is that it doesn't enforce the actual, expected positions and that was actually one of the design decisions behind it because sometimes it's hard to determine which expression is "expected" and which is "actual".

It feels backwards to try to enforce a rule in a style guide that goes against the design decision of the tool.

from elixir_style_guide.

christopheradams avatar christopheradams commented on May 4, 2024 1

Can you link to any examples of both styles?

Even though the assert macro doesn't care, obviously, there are a few reasons I would tend to favor assert expected == actual:

  • tradition (other testing libraries that take args and use that order)
  • if you use a pattern match instead of a truthy value, the expected pattern is on the left
  • assertion errors are often written/understood in the form "expected A but got B"

from elixir_style_guide.

marocchino avatar marocchino commented on May 4, 2024

sure.

from elixir_style_guide.

christopheradams avatar christopheradams commented on May 4, 2024

From the looks of it, every test module is internally consistent (they pick one order and stick with it), but there are examples of both styles.

I'd guess the motivation behind putting actual first is to highlight "this is what is being tested". For example StringTest.

Would love to hear some more opinions.

from elixir_style_guide.

christopheradams avatar christopheradams commented on May 4, 2024

The great thing about the assert macro is that it doesn't enforce the actual, expected positions

Sure, but the style guide is about enforcing things the compiler or runtime don't care about. :)

I tend to think that expected first has better meaning but actual first has better style (especially when successive lines test the same function over and over). Therefore, it seems to be a wash. That would recommend against adding a rule for this.

from elixir_style_guide.

eksperimental avatar eksperimental commented on May 4, 2024

lexmag's elixir style guide is about to include this rule
lexmag/elixir-style-guide#11

from elixir_style_guide.

christopheradams avatar christopheradams commented on May 4, 2024

Thanks for the pointer @eksperimental

For context the linked issue recommends that the "expected result goes on the right", in other words: actual == expected

Since this guide doesn't try to be unnecessarily "opinionated", I'm not sure if there's a way forward here.

from elixir_style_guide.

DavidAntaramian avatar DavidAntaramian commented on May 4, 2024

@christopheradams I don't think the style guide needs to be opinionated about it, just point out "be consistent."

As pointed out in the linked issue, one of the problems with the phrasing is that it will always be expected = actual when performing a pattern match as a test acceptance.

from elixir_style_guide.

christopheradams avatar christopheradams commented on May 4, 2024

Added a new testing section with this actual == expected guideline. Thanks everyone!

from elixir_style_guide.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.