我有mocha, chai and sinon
Javascript测试框架和库在我继承的应用程序上可用。我对他们所有人^都是陌生的,并且我一直在阅读他们的APIs
,以学习如何正确使用它们。
这里是我要验证的Javascript对象。如果缺少预期的name
属性,验证程序将抛出UsageError: name property is missing
。
// person object
const person = { name: 'peter' }
// validate method of exported validator JS component
async validate(person) {
const { name } = person;
const promises = [];
if (typeof name !== object) { throw new UsageError('name property is missing'); }
...
else { promises.push(fooService(name)); }
try {
await Promise.all(promises);
} catch (error) { throw (error); }
}
// unit test in sinon
describe('Validate person', async function() {
it('should throw error not find name property', async function() {
const name = { 'address': '1234 somewhere' };
try {
await validator.validate(person);
} catch(error) {
sinon.assert.match(error, 'name property is missing');
}
});
这是async + await
代码,我几乎不知道sinon
是合适的,所以当我执行单元测试时,我什至对以下错误消息感到困惑:
AssertError: expected value to match
expected = UsageError: name property is missing
actual = UsageError: name property is missing
我认为actual
和expected
的字符串相同,但是我不明白为什么得到AssertError
。如果有人可以向我解释我做错了什么,并指导我实施此单元测试的正确方法,我将不胜感激。泰!
失败,因为测试会比较参考。该代码通过使用new
语句(例如new UsageError
)创建新的引用。
示例:
let expect = require('chai').expect; it('checks equality' ,function() { const actual = new Error('name property is missing'); const expected = new Error('name property is missing'); expect(actual).to.equal(expected); })
上面的代码将提供输出
// output AssertionError: expected [Error: name property is missing] to equal [Error: name property is missing] + expected - actual
该解决方案也许您可以通过访问
message
属性来比较该消息
it('checks equality' ,function() { ... expect(actual.message).to.equal(expected.message); })
希望有帮助