2017-05-16 4 views
0

これは私のTDD初日です。Mocha Thinks Resolutionメソッドが過度に指定されています。コールバックを指定する*または*プロミスを返す;両方ともではない

var mongoose = require("mongoose"), 
    should = require('should'), 
    User = require("app/models/user"); 

mongoose.connect('mongodb://localhost/altor-security'); 

describe('user data', function() { 
    it('password should be different after changing password', function(done) { 
    var old_password_hash, 
     new_password = "12345678"; 

    return User.findOne({ email: "[email protected]" }).exec() 
    .then(function(user) { 
     old_password_hash = user.password; 
     return User.findOneAndUpdate({ _id : user._id }, { password: new_password }, { new: true }).exec(); 
    }) 
    .then(function(user) { 
     user.password.should.not.equal(old_password_hash); 
     done(); 
    }) 
    .catch(function(err) { 
     err.should.equal(null); 
     done(); 
    }) 
    }); 
}) 

私のテストは、User.findOneAndUpdateメソッドが指定されていないと思うので失敗します。しかし、findCommand、update、およびoptionsの3つのパラメータを取ります。

なぜそれが失敗しているのでしょうか?それはUser.findOneAndUpdateメソッドは、指定された上でと思っているので

おかげ

答えて

2

私のテストは失敗します。

実際には、それは、 "解決方法"(つまり、コードがmocha非同期テストに指示する方法)が指定されていないことを示します。

コールバックを使用してプロミスを返しているので、mochaはテストが完了したときとそれが正常であると判断できません。

doneを使用するか、または約束を返す必要があります。両方ではありません。

兼ね備え方法

describe('user data', function() { 
    it('password should be different after changing password', function(/*do not use done*/) { 
    var old_password_hash, 
     new_password = "12345678"; 

    // return a Promise 
    return User.findOne({ email: "[email protected]" }).exec() 
    .then(function(user) { 
     old_password_hash = user.password; 
     return User.findOneAndUpdate({ _id : user._id }, { password: new_password }, { new: true }).exec(); 
    }) 
    .then(function(user) { 
     user.password.should.not.equal(old_password_hash); 
    }) 
    }); 
}) 

OR

describe('user data', function(done) { 
    it('password should be different after changing password', function(done) { 
    var old_password_hash, 
     new_password = "12345678"; 

    // do not return anything 
    User.findOne({ email: "[email protected]" }).exec() 
    .then(function(user) { 
     old_password_hash = user.password; 
     return User.findOneAndUpdate({ _id : user._id }, { password: new_password }, { new: true }).exec(); 
    }) 
    .then(function(user) { 
     user.password.should.not.equal(old_password_hash); 
     done(); 
    }) 
    .catch(function(err) { 
     err.should.equal(null); 
     done(); 
    }) 
    }); 
}) 
(約束を返します)
関連する問題