This is looking good, I like "bundle". Any specific reason to not support nesting?
Thanks! Drew On Saturday, May 28, 2016, José Valim <[email protected]> wrote: > Both features have been implemented here: > > 1. > https://github.com/elixir-lang/elixir/commit/056536add75accc02542ef84d48c8535127c4171 > 2. > https://github.com/elixir-lang/elixir/commit/58377cdeea091643c002414942dcab4e8b042b13 > > Notice we used the name "bundle" instead of "group" since it provides the > same idea of grouping and can be read as both noun and verb. One of the > benefits of the word "bundle" is that it generally does not come with the > expectation it can be nested. > > In any case, the naming discussion is still open for debate and feedback > is welcome. > > > > *José Valim* > www.plataformatec.com.br > Skype: jv.ptec > Founder and Director of R&D > > On Sat, May 28, 2016 at 8:53 AM, José Valim < > [email protected] > <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote: > >> Thanks everyone for the feedback so far. >> >> It is very likely we won't go with the term "group". It is an overloaded >> term and given the direction we are taking with GenStage and GenBroker, I >> wouldn't be surprised if we end-up adding Kernel.group/2 or something >> similar in the future. Group or group by is an essential in many collection >> handling operations and there is nothing specific to test in "group". >> >> Here are other suggestions that came up: "grouping", "bundle", >> "test_group". >> >> >> >> *José Valim* >> www.plataformatec.com.br >> Skype: jv.ptec >> Founder and Director of R&D >> >> On Sat, May 28, 2016 at 8:39 AM, Daniel Perez <[email protected] >> <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote: >> >>> I think `group` is very explicit and easy to understand. >>> I find it much clearer than describe/context. >>> >>> > group "when name is an atom" >>> >>> I think this is because it is the text we would write with `context`, >>> but dropping the initial `when` would simply read fine IMO: group "name >>> is an atom" >>> >>> Daniel >>> >>> >>> On Saturday, May 28, 2016 at 1:18:30 AM UTC+9, José Valim wrote: >>>> >>>> Hi everyone, >>>> >>>> There are two recurrent complaints about ExUnit when writing tests: >>>> >>>> 1. It does not support grouping >>>> 2. It does not allow developers to name nor compose setup >>>> >>>> The only way in ExUnit to declare some code as part of a setup is by >>>> declaring a setup block and calling the function inside the block, like >>>> this: >>>> >>>> setup context do >>>> >>>> {:ok, login_as(context)} >>>> >>>> end >>>> >>>> >>>> I would like to propose improvements for those two issues. I will first >>>> write a proposal including code samples and then we can discuss naming and >>>> implementation details. >>>> >>>> ## Groups and named setups >>>> >>>> The idea is to introduce the group/2 macro and allow atoms to be given >>>> to setup: >>>> >>>> defmodule StringTest do >>>> >>>> use ExUnit.Case, async: true >>>> >>>> group "String.capitalize/2" do >>>> >>>> setup :set_test_string >>>> >>>> test "capitalizes the first letter", context do >>>> >>>> assert "T" <> _ = context.test_string >>>> >>>> end >>>> >>>> end >>>> >>>> >>>> group "String.bar/2" do >>>> >>>> setup context do >>>> >>>> # Regular setups are not going anywhere and will still work >>>> >>>> # You may return :ok | keyword | map >>>> >>>> end >>>> >>>> test "..." do ... >>>> >>>> end >>>> >>>> def set_test_string(_context) do >>>> >>>> %{test_string: "test_string"} >>>> >>>> end >>>> >>>> end >>>> >>>> >>>> By using groups, we can now better organize the tests and named setups >>>> allow us to easily share setup logic between groups without relying on >>>> nesting. >>>> >>>> Internally, we can consider "setup :some_atom" to be equivalent to: >>>> >>>> setup context, do: context |> some_atom() >>>> >>>> >>>> The group/2 macro will also store the group tag in the test. For >>>> example, you will be able to: >>>> >>>> mix test --only group:"String.capitalize/2" >>>> >>>> >>>> Setups defined in group/2 will only apply to the group. We will also >>>> support @grouptag to set some tags specific to the current group. setup_all >>>> cannot be called inside the group (as setup_all is always per test case). >>>> We won't allow group calls to be nested (we want developers to compose at >>>> the function level and not on nesting/hierarchies). >>>> >>>> ## Naming >>>> >>>> There is one big open question which is: is "group" a good name? I am >>>> personally not a fan. group works fine for grouping at the unit test level >>>> but it does not read nicely when you want to group based on a condition >>>> (for example, group "when name is an atom"). >>>> >>>> Here are some alternatives: context, testing, group, describe, >>>> scenario, having, etc. I recommend everyone to actually try to write some >>>> pseudo-groups in their tests and see what reads nicely. I would love your >>>> feedback on what you think works nicely. Please include examples. :) >>>> >>>> One of my favorite picks is context but we already use context to mean >>>> the data that goes through setup and tests. >>>> >>>> ## Feedback >>>> >>>> Please give us feedback on this proposal. Those features are mostly >>>> straight-forward to implement, the most important aspects are the >>>> semantics. >>>> >>>> Thank you! >>>> >>>> *José Valim* >>>> www.plataformatec.com.br >>>> Skype: jv.ptec >>>> Founder and Director of R&D >>>> >>> >> > -- > 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] > <javascript:_e(%7B%7D,'cvml','elixir-lang-core%[email protected]');> > . > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4L6iRmHzfjQmXn0vTC0E%2B3gW1%3Drqj_eett1YvCfwOrXAg%40mail.gmail.com > <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4L6iRmHzfjQmXn0vTC0E%2B3gW1%3Drqj_eett1YvCfwOrXAg%40mail.gmail.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/CAN3B1jdTD3nO6So_YD-aVkN6Hfc7dCBajnpfMbjoj0RSJtpMLQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
