busted icon indicating copy to clipboard operation
busted copied to clipboard

[Feature Request] Could we introduce a new context for ordered tests?

Open StarlightIbuki opened this issue 1 year ago • 11 comments

For example:

step("connect to server", function()
  -- ...
end)

step("send requests", function()
  -- ...
end)

The second test should happen after the first no matter what arguments are given, and the second is skipped when the first is failed/skipped.

I know the same behavior can be achieved by putting them into the same it() block, but:

  1. It will only be counted as 1 test in the summary;
  2. it won't benefit from before_each() etc.

StarlightIbuki avatar Feb 19 '24 02:02 StarlightIbuki

Are tests not run in order now? The flag --sort-tests already defaults to off, and currently we have no parallelization, all all tests are done one at a time in order. Is --no-keep-going what you are looking for? Skipping can be handled by tagging related tests with the same tag to skip.

All this isn't to say we can't consider adding such a feature, but without having threading in the first place it seems like kind of a moot point, no?

alerque avatar Feb 21 '24 06:02 alerque

@alerque The idea is that this context keeps its order even when we set --sort-tests or --shuffle to true, and persists in its behavior when --keep-going is true. After all, we see more clear intentions with explicit statements.

StarlightIbuki avatar Feb 21 '24 07:02 StarlightIbuki

And no, it's not the same to use --no-keep-going. I want it to skip its siblings but not other subsequent tests.

StarlightIbuki avatar Feb 21 '24 07:02 StarlightIbuki

Is it possible to achieve your dependency situation by nesting existing blocks?

alerque avatar Feb 21 '24 12:02 alerque

@alerque No given what I read in the doc.

StarlightIbuki avatar Feb 22 '24 02:02 StarlightIbuki

How would this work if one selects only a single test from a list of steps, using a --tag for example? something to cater for or would that be a user error? (and should it be called out as such?)

Tieske avatar Feb 25 '24 20:02 Tieske

@Tieske It should be a user error I guess? Or simply make it skipped due to the dependency?

StarlightIbuki avatar Feb 26 '24 06:02 StarlightIbuki

I would imagine the "test" unit that would be skipped / tagged would be whatever is above the steps, not the steps themselves.

alerque avatar Feb 26 '24 07:02 alerque

I probably won't be able to work on this any time soon, but I would try to facilitate a PR is somebody else did.

alerque avatar Feb 26 '24 07:02 alerque

@StarlightIbuki busted has been modeled after some other frameworks, how was this case handled there? That might give some pointers as to how to solve it.

(this case is quite fundamental to how Busted works, hence asking)

Tieske avatar Feb 27 '24 13:02 Tieske

@StarlightIbuki busted has been modeled after some other frameworks, how was this case handled there? That might give some pointers as to how to solve it.

(this case is quite fundamental to how Busted works, hence asking)

Hmmm. Good point. I did not think much before. I remember some of the frameworks make some assertions grouped as a "test point", which needs to be all passed to count for one success test point, and they are just a part of the test flow. Some of the test frameworks explicitly claim the dependency of a test (like with the notation "@depend.before(test1)"). And for some of the frameworks, this is simply not considered. I guess we have some freedom on how to do it.

StarlightIbuki avatar Mar 05 '24 09:03 StarlightIbuki