Ошибка MochaTest - UnhandledPromiseRejectionWarning: TypeError: done не является функцией - PullRequest
0 голосов
/ 23 февраля 2019

Я тестирую создание пользователя в mongoDBusing Mocha.Ниже приведен тест для создания пользователя. Основная проблема заключается в том, что я получаю 2 ошибки во время выполнения теста npm: 1. терминал останавливается / отстает и никогда не завершает тест.2. Выдается ошибка: "(узел: 21233) UnhandledPromiseRejectionWarning: TypeError: done не является функцией" Я неправильно выполняю обещание с done?

Проект структуры каталогов

|-> src
   ->user.js
|-> project
   ->create_test.js
   ->test_helper.js

create_test.js

//startoffile
const assert = require('assert');

const User = require ('../src/user');


describe('Creating records', () => {
  it('saves a user', () => {
    //run an assertion: validate data
    let joe = new User({ name: 'Joe' });

    joe.save().then( (done) => {
      assert(!joe.isNew);
      done();
    });

  });

});

//endoffile

Он ссылается на файл user.js для создания пользователя.

user.js

//startoffile

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

var UserSchema = new Schema({
  name: String
});

var User = mongoose.model('user', UserSchema);

module.exports = User;

//endoffile

Кроме того, существует вспомогательный файл, который включает несколько хуков, которые проверяют соединение и отбрасывают все данные в таблице.

test_helper.js

//startoffile

const mongoose = require('mongoose');

mongoose.Promise = global.Promise;

before( (done) => {
  mongoose.connect('mongodb://localhost/users_test');
  mongoose.connection
  .once('open', () => { done(); })
  .on('error', (error) => {
    console.warn('Warning', error);
  });
});


beforeEach((done) => {
   mongoose.connection.collections.users.drop(
     () => {
       done();
     });


});

//endoffile

1 Ответ

0 голосов
/ 23 февраля 2019

Если вы посмотрите на трассировку стека, вы должны увидеть, что она идет из блока done в нижнем it, потому что вы не передаете его в обратный вызов it.(вместо этого он должен читать it('saves a user', (done) => {)

describe('Creating records', () => {
  it('saves a user', () => {
    //run an assertion: validate data
    let joe = new User({ name: 'Joe' });

    joe.save().then( (done) => {
      assert(!joe.isNew);
      done();
    });

  });

});

mocha поддерживает обещания, поэтому вы можете переписать этот код для возврата обещаний (вместо использования done).

it('saves a user', () => {
  let joe = new User({name: 'Joe'});
  return joe.save()
    .then(() => assert(!joe.isNew));
});

Или, если вы используете async/await:

it('saves a user', async () => {
  let joe = new User({name: 'Joe'});
  await joe.save()
  assert(!joe.isNew);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...