我有一个模块用户 - 就像这样:
module.exports = User = (function() {
function User(params) {
this.id = params.id;
this.first_name = params.first_name || '';
this.last_name = params.last_name || '';
this.username = params.username;
this.email = params.email;
this.password = params.password;
};
User.findByUsername = function(username, callback) {
if (!_.isEmpty(username)) {
var opts = {table: TABLE, where: {sql: "username='"+username+"'"}};
QueryDispatcher.findWhere(opts, function(err, result) {
if(!_.isEmpty(err)) { return callback(err, null)}
callback(null, result.rows[0]);
});
};
};
return User;
};
使用类方法的函数:
module.exports = AuthStrategies = (function() {
AuthStrategies.localStrategy = function(username, password, done) {
async.waterfall([
function(callback) {
User.findByUsername(username, function(err, user){
if (err) { callback(err) };
if (_.isEmpty(user)) {
callback(null, false, { message: 'Incorrect username.' });
};
callback(null, user, null)
});
},
function(user, opts, callback) {
"do something here and call the next callback"
}]
, function(err, user, opts) {
if(err) { return done(err)}
if(!user) { return done(null, false, opts.message)}
done(null, user)
});
};
return AuthStrategies;
})();
我有我的茉莉花测试 -
var Auth = require('path to AuthStrategies module')
describe('Auth', function() {
describe('#AuthStrategies.localStrategy', function() {
describe('when user creds are valid', function() {
var test_user;
beforeEach(function(){
test_user = new User({
username: 'test996'
, password: 'password123'
, email: 'testemamil@email.com'
, first_name: ''
, last_name: ''
});
spyOn(User, "findByUsername").and.callFake(function(usrename, cb) {
cb(null, test_user);
});
});
it('returns user object', function(done) {
Auth.localStrategy('test996', 'password123', function(err, user, opts) {
expect(err).toEqual(null);
expect(user).toEqual(test_user);
done()
})
});
});
});
});
基本上我想要删除User Class方法findByUsername
并使用我自己的结果伪造回调,即nul错误和用户(就好像查找成功)。
我在很多"班级"我的应用程序中的方法,并没有这个问题。这让我感到困惑。该错误仅在我向间谍添加.and.callThrough
或.and.callFake
时显示...当我删除此测试的时刻只是超时...这是间谍有效并且不会调用async瀑布继续进行回调。
我得到的错误是 -
答案 0 :(得分:0)
所以我想出来了 -
无论如何,上面看到的错误都会发生。我之所以得到上述"额外信息"这让我一扫而光 - 因为我是在分开运行测试。
./node_modules/.bin/jasmine ./tests_to_run_spec.js
正常情况会发生 - 我会因缺少回调而导致超时失败。就像我上面的情况一样,我并没有在伪造的函数中调用回调函数。
实际上更有趣的是 - 从我的PATH运行jasmine-node并不喜欢在这个特殊的间谍上调用.and....
。真的不知道。但是我如何让spyOn(User, 'findByUsername').and.callFake
......工作