You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
forAll :: ∀ e a f. Foldable f => (a -> String) -> String -> f a -> (a -> Aff e Unit) -> Spec e Unit #49
What are thoughts on adding something like this this?
forAll::∀eaf. Foldablef=> (a->String) ->String->fa-> (a->AffeUnit) ->SpeceUnit
forAll itTitle title arb f = describe title do
for_ arb \a -> it (itTitle a) (f a)
...
forAll _.str "format (unformat a) = a" arb \({ str }) ->do
(format $ unformat str) `shouldEqual` (Right str)
...
I have been using for_ in it block but if some test case fails then other items are not tested and you can't see them in log. using this function you can see each item in log and all of them will be executed.
I was looking for something like this to write a tests that takes a record
of functions that work against a database, and a record of the same type
with fakes, making sure both behave the same in the test.
Yeah, this does seem useful. I have some questions/considerations:
The name forAll feels like it's too close to forall. Would prefer something closer to it, as it's basically a "multi-it". Perhaps they?
I'd prefer to drop the outer describe in this definition, keeping it a bit simpler, and not making an assumption that you want a separate level for the foldable. I'm not sure, but you might want to do something like:
describe "many things"do
they show [2, 4] \n -> (n `mod` 2) `shouldEqual`0
they show [4, 8] \n -> (n `mod` 4) `shouldEqual`0
And as a last thing, is the argument order the way we want? Not saying it isn't, but you might have feedback on that.
they::∀eaf. Foldablef=> (a->String) ->fa-> (a->AffeUnit) ->AffeUnit
they itTitle arb f = for_ arb \a -> it (itTitle a) (f a)
...
describe "format (unformat a) = a"do
they show arb \(str) -> (format $ unformat str) `shouldEqual` (Right str)
...
About order:
I don't have strong opinion on it, but If we leave f as last argument, then we have two options:
NAME itTitle arb f, infix usage: itTitle `NAME` arb f
NAME arb itTitle f, infix usage: arb `NAME` itTitle f
I can't think of a good name (english is not my native language) but there might be some name which will best fit this usage. maybe that? (show `that` validDates parseAndUnparseComutes)
Activity
felixSchl commentedon Apr 25, 2017
I would welcome utility functions like these as I have been re-inventing that wheel many times over for neodoc
mostalive commentedon Apr 26, 2017
owickstrom commentedon Apr 27, 2017
Yeah, this does seem useful. I have some questions/considerations:
forAllfeels like it's too close toforall. Would prefer something closer toit, as it's basically a "multi-it". Perhapsthey?describein this definition, keeping it a bit simpler, and not making an assumption that you want a separate level for the foldable. I'm not sure, but you might want to do something like:Thanks for the suggestion!
safareli commentedon Apr 27, 2017
describeis good idea.theyseems good to me.so at this point it looks like:
About order:
I don't have strong opinion on it, but If we leave
fas last argument, then we have two options:NAME itTitle arb f, infix usage:itTitle `NAME` arb fNAME arb itTitle f, infix usage:arb `NAME` itTitle fI can't think of a good name (english is not my native language) but there might be some name which will best fit this usage. maybe
that? (show `that` validDates parseAndUnparseComutes)owickstrom commentedon Apr 28, 2017
Yeah, I could not come with any specific order either, as it doesn't read naturally anyway. I think we should go with what you already have:
Would you like to submit this as a PR?
safareli commentedon Apr 28, 2017
Yes!