2015-11-24 62 views
2

我使用的是貓鼬與承諾與藍鳥的包裝方法是這樣的處理:適當的錯誤承諾在摩卡測試

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);'會時,有一個'err',這會導致測試失敗拋出'AssertionError'。 – Bergi

+0

@Bergi我應該如何處理*?我只能等待它的假設檢驗不合格,不打破它 – diegoaguilar

+0

嘗試'.catch(完成)' – Bergi

回答

0

首先,如果你嘗試插入每個測試相同的數據,你只需將首次試運行工作,所以你必須清除數據庫或每個測試運行之前刪除特定的記錄。

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

摩卡現在支持承諾,所以不需要完成回調。您的測試可以改寫爲:

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);