当实际值和预期值都是相同的字符串值时,为什么sinon.assert.match(actual,expected)会引发AssertError?

问题描述 投票:0回答:1

我有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

我认为actualexpected的字符串相同,但是我不明白为什么得到AssertError。如果有人可以向我解释我做错了什么,并指导我实施此单元测试的正确方法,我将不胜感激。泰!

javascript sinon
1个回答
0
投票

失败,因为测试会比较参考。该代码通过使用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);
})

希望有帮助

© www.soinside.com 2019 - 2024. All rights reserved.