Disclaimer: I am the author of the assertthat module, which I will refer to in this answer.
Basically, you can achieve all things with Node with a very own assert module, which you can do with all the other modules there, like Should.js , expect.js or assertthat . Their main difference is how you can express your intention.
Semantically speaking, the following lines of code are equivalent to each other:
assert.areEqual(foo, bar); foo.should.be.equal(bar); expect(foo).to.be(bar); assert.that(foo).is.EqualTo(bar);
There are two main differences syntactically:
First, the should syntax only works if foo not null or undefined , so it is inferior to others. Secondly, the difference in readability: although assert.that(...) is read as a natural language, everyone else does not.
After all, Chai is just a wrapper around several approval modules to make your life easier.
So, briefly edit the short story: No, there are no technical reasons why you should prefer each other, but readability and null compatibility may be the reasons.
Hope this helps :-)
PS: Of course, internally they can be implemented in different ways, so there can be subtle things, for example, how equality is checked. As stated in the disclaimer, I am the author of the claims, so I can be biased, but in the last few years I have had a situation from time to time, where it was argued that it was more reliable than others, but, as said, I can be biased.