2
我有以下貓鼬單元測試。 article.save()回調中的控制檯日誌行從數據庫中保存後,打印出歸屬於該實體的已分配_id。但是,無論何時我在該行或實際上在相應單元測試的第一行中放置斷點時,實體在文章集合中都不可用?貓鼬單元測試
任何人都可以解釋爲什麼這應該是?我正在努力理解這一點,並會感謝任何幫助!
謝謝, 馬克。
var app = require('../../server.js'),
should = require('should'),
mongoose = require('mongoose'),
User = mongoose.model('User'),
Article = mongoose.model('Article');
var user, article;
describe('Article Model Unit Tests:', function() {
beforeEach(function (done) {
user = new User({
firstName: 'Full',
lastName: 'Last',
displayName: 'Full Name',
email: '[email protected]',
username: 'username',
password: 'password'
});
user.save(function() {
article = new Article({
title: 'Article Title',
content: 'Content Article',
user: user
});
article.save(function (err, savedArticle) {
console.log(savedArticle._id);
});
});
done();
});
describe('Testing the save method', function() {
it('Should be able to save without problems', function() {
article.save(function (err) {
should.not.exist(err);
});
});
it('Should not be able to save without title', function() {
article.title = '';
article.save(function (err) {
should.exist(err);
});
});
});
afterEach(function(done) {
Article.remove(function(){
User.remove(function(){
done();
});
});
});
});
感謝百萬dm03514!我不知道爲什麼這有所作爲,但? done()方法完成什麼?它是否有效沖洗貓鼬模型?用戶永遠不會在單元測試中保存任何內容,但在應用程序中保存。 對不起,有很多問題,但我試圖開始與平均值,並有更多的問題比在這個階段的答案。 –
如果我完全刪除done(),那麼文章在控制檯行的MongoDB中可用。 如果我將article.save()放在user.save()後放置done(),則文章不可用? 任何幫助在這裏將不勝感激。我來自Spring/Hibernate/Oracle的背景,所以我的假設可能會得到緩和。 –
通常稱爲done的參數很奇怪,將它作爲beforeEach的一個參數添加,或者它將該操作標記爲async,如果您在其中添加了done並且未調用done,則測試用例會出錯。 Beforeeach可能會很奇怪,因爲如果它沒有拋出錯誤,它就會超時,然後去執行它,也許給人的印象是一切正常。 – dm03514