Mongodb тестирование в Node - PullRequest
0 голосов
/ 01 марта 2019

Я использовал Mocha для тестирования в Node, потому что, похоже, это то, что использует большинство людей.Я также использую MongoDB для хранения своих данных, и так как мой сервер - это простой API-сервер, почти все мои методы - это простые запросы к базе данных, которые я пытаюсь протестировать с помощью Mocha.Теперь проблема, с которой я сталкиваюсь, заключается в том, что (кроме того, что в общем случае довольно сложно тестировать асинхронные функции), я не могу найти правильный способ проверки исключения mongoDB.

  it('Should not create account', async (done) => {
   try {
    await createAccountDB(user);
    await createAccountDB(user);
  } catch (err) {
    assert.notEqual(err, null);
    console.log(err);
  }
  finally {
    done();
  }
 });
});

Я пытаюсь создать учетную запись для пользователя (в основном просто сохранить объект в БД), а затем снова создать ту же учетную запись, что должно привести к ошибке дубликата ключа.

Теперь этоне работает, и, насколько я могу судить, это потому, что я определил как асинхронный, так и сделал.Причина, по которой я это сделал, заключается в том, что если я не определю async, мне понадобится целая куча .then и .catches, которые сделают код ужасным, но если я не включу, то done () в finallyБлок, мой тест, кажется, никогда не попадает в блок catch.

Есть ли способ написать такие тесты в Mocha, которые не делают ваш код абсолютно ужасным?

1 Ответ

0 голосов
/ 01 марта 2019

Поскольку вы уже используете модель async/await, вам необязательно нужен обратный вызов done для тестового случая.Некоторые версии mocha будут предупреждать вас, если у вас есть несколько способов указать завершение теста.Попробуйте это:

it('should not create an account', async function() {
   try {
    await createAccountDB(user);
    await createAccountDB(user);
    throw new Error('Did not reject a duplicate account');
  } catch (err) {
    assert.notEqual(err, null);
    // any other assertions here
  }
});

Ошибка, выданная в блоке try/catch, очень важна - без нее тест все равно пройдет, даже если ошибка не будет выдана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...