Мокко Чай Сиквелиз: я не могу сделать тесты неудачными - PullRequest
1 голос
/ 12 октября 2019

Я пытаюсь написать тест для модели в sequelize, но я не понимаю, почему она не дает сбоя

it('should find user by id', (done) => {
  users.findByPk(2)
  .then((retrievedUser) => {
    expect(retrievedUser.dataValues).to.deep.equal('it should break');
    done();
  })
  .catch((err) => {
    console.log(`something went wrong [should find user by id] ${err}`);
    done();
  })
});

Когда я запускаю тест, вывод будет следующим

something went wrong [should find user by id] AssertionError: expected { Object (id, email, ...) } to deeply equal 'it should break'
1   -__,------,
0   -__|  /\_/\
0   -_~|_( ^ .^)
    -_ ""  ""

  1 passing (40ms)

Если кто-то хочет посмотреть полный код, я создал проект

1 Ответ

1 голос
/ 12 октября 2019

Чтобы асинхронный тест Мокша не прошел, передайте ошибку в качестве аргумента функции готового обратного вызова

it('should find user by id', (done) => {
  users.findByPk(2)
  .then((retrievedUser) => {
    expect(retrievedUser.dataValues).to.deep.equal('it should break');
    done();
  })
  .catch((err) => {
    console.log(`something went wrong [should find user by id] ${err}`);
    done(err);
  })
});

В качестве альтернативы используйте асинхронную функцию без обратного вызова:

it('should find user by id', async () => {
  const retrievedUser = await users.findByPk(2);
  try {
    expect(retrievedUser.dataValues).to.deep.equal('it should break');
  } catch (err) {
    console.log(`something went wrong [should find user by id] ${err}`);
    throw err;
  }
});

Тем не менее, я бы не рекомендовал регистрировать сообщение об ошибке неудачных тестов, потому что это то, что Mocha уже делает для вас в типичной настройке. Так что я бы избавился от блока try-catch в приведенном выше примере.

it('should find user by id', async () => {
  const retrievedUser = await users.findByPk(2);
  expect(retrievedUser.dataValues).to.deep.equal('it should break');
});
...