Почему sinon.assert.match (фактический, ожидаемый) генерирует AssertError, когда и фактическое, и ожидаемое являются идентичными строковыми значениями? - PullRequest
0 голосов
/ 16 марта 2020

У меня есть 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 person = { 'foo': '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. Я был бы признателен, если бы кто-нибудь объяснил мне, что я делаю неправильно, и указал, как правильно выполнить этот тестовый модуль. Ty!

[обновление]

Извиняюсь, я понял, что дал неверный пример в тестовом примере, который я опубликовал. Я исправил это, имея person object does not contain name property.

1 Ответ

0 голосов
/ 05 апреля 2020

не удалось, потому что тест сравнивает ссылку. Код создает новую ссылку, используя оператор 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);
})

Надеюсь, оно поможет

...