2015-11-24 5 views
2

я использую Мангуст с обещаниями, окружив его таким образом с помощью метода Bluebird в:Надлежащие обещания обработки ошибок при испытаниях мокко

var mongoose = promise.promisifyAll(require('mongoose'))

Тогда я пытаюсь использовать метод асинхронной:

var newUser = new User({email: '[email protected]', password: '123', userType: 'admin', name: 'paco'}); 
newUser.saveAsync() 
    .then(function (createdUser) { 
    console.log(createdUser); 
    should.exist(createdUser); 
    done(); 
    }) 
    .catch(function (err) { 
    console.log(err); 
    should.not.exist(err); 
    done(); 
    }); 

Однако, поскольку схема получила уникальный индекс для поля электронной почты, если я попытаюсь запустить это несколько раз, то будет вызван Unhandled rejection AssertionError: expected Error, что приведет к сбою.

Как я могу надлежащим образом обработать любую ошибку?

+0

'should.not.exist (ERR),' выбросит 'AssertionError', когда есть' err', что вызывает ваш тест на провал. – Bergi

+0

@ Bergi Как я должен обрабатывать его *? Я только дождался его, чтобы выполнить тест, не сломав его. – diegoaguilar

+0

Попробуйте '.catch (done)' – Bergi

ответ

0

Прежде всего, если вы попытаетесь вставить те же данные в каждый тест, у вас будет только первый тестовый прогон, поэтому вы должны очистить базу данных или удалить эту конкретную запись до начала каждого теста.

beforeEach(function() { 
    return Model.findOneAndRemove({email: '[email protected]'}) 
}); 

Mocha теперь поддерживает обещания, поэтому нет необходимости в обратном вызове. Ваш тест можно переписать в виде:

var newUser = new User({ 
    email: '[email protected]', 
    password: '123', 
    userType: 'admin', 
    name: 'paco' 
}); 
return newUser.saveAsync().should.eventually.be.fulfilled(); 
// or return newUser.saveAsync().should.eventually.be.equal(value);