柴的主张,期望和应该有什么区别?
assert
, expect
和should
和什么时候使用什么有什么区别?
assert.equal(3, '3', '== coerces values to strings'); var foo = 'bar'; expect(foo).to.equal('bar'); foo.should.equal('bar');
那里logging的差异。
这三个界面呈现不同风格的执行断言。 最终,他们执行相同的任务。 有些用户喜欢一种风格。 这就是说,还有一些值得强调的技术上的考虑:
-
assert和expect接口不会修改
Object.prototype
,而应该这样做。 因此,在不能或不想更改Object.prototype
的环境中,它们是更好的select。 -
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.true
和foo.should.be.true
将输出以下内容,并且foo === 1
:
AssertionError: expected 1 to be true
所以虽然期望和应该接口更好阅读 ,但当一个断言失败时,不像一个接口更自然的提供信息。 这个消息对所有三个接口来说都是一样的,并不能告诉你你testing的是什么 ,只是你得到的值是1
但是你想要的是true
。 如果你想知道你正在testing什么,你需要添加一条消息。