柴的主张,期望和应该有什么区别?

assertexpectshould和什么时候使用什么有什么区别?

 assert.equal(3, '3', '== coerces values to strings'); var foo = 'bar'; expect(foo).to.equal('bar'); foo.should.equal('bar'); 

那里logging的差异。

这三个界面呈现不同风格的执行断言。 最终,他们执行相同的任务。 有些用户喜欢一种风格。 这就是说,还有一些值得强调的技术上的考虑:

  1. assert和expect接口不会修改Object.prototype ,而应该这样做。 因此,在不能或不想更改Object.prototype的环境中,它们是更好的select。

  2. assert和expect界面支持自定义消息几乎无处不在。 例如:

     assert.isTrue(foo, "foo should be true"); expect(foo, "foo should be true").to.be.true; 

    如果断言失败,则消息“foo应该为真”将与失败的断言一起输出。 您没有机会使用应用界面设置自定义消息。

(历史logging:很长一段时间,这个答案指出,为了得到一个自定义的消息,你需要使用一个解决方法。AurélienRibon告诉我,传递一个消息, expect作为第二个参数是有效的。需要一个解决方法,我还没有find哪个版本的Mocha开始提供这个消息的支持,也没有find哪个版本的文档第一次logging。

请注意,如果不使用自定义消息,则assert.isTrue(foo)expect(foo).to.be.truefoo.should.be.true将输出以下内容,并且foo === 1

  AssertionError: expected 1 to be true 

所以虽然期望和应该接口更好阅读 ,但当一个断言失败时,不像一个接口更自然的提供信息。 这个消息对所有三个接口来说都是一样的,并不能告诉你你testing的是什么 ,只是你得到的值是1但是你想要的是true 。 如果你想知道你正在testing什么,你需要添加一条消息。