【发布时间】:2015-11-09 15:38:25
【问题描述】:
我在 node 中的一些 mocha 测试有问题 - 我正在测试一个模型并调用模型的方法来获得响应 - 只是 Model.findOne 方法。
在主代码库中,它按预期返回(就像在数据库中查询时一样),但是在测试时它无法到达回调并且测试只是超时..请问有什么问题吗?
摩卡的输出:
1) user model tests check user exists email should equal input: test123@gmail.com:
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
对我来说,这似乎是一个配置问题 - 但我不知道在哪里。
代码如下:
userTest.js
var Chance = require('chance');
var expect = require('chai').expect;
var supertest = require('supertest');
var api = supertest('http://localhost:3000');
var chance = new Chance();
var User = require('../api/models/UserModel').User;
var validUser = {
email: 'test123@gmail.com',
password: "123456"
};
describe.only('user model tests', function () {
describe('check user exists', function () {
it("email should equal input: " + validUser.email, function (done) {
User.findOneByEmail(validUser.email, function (err, result) {
expect(result.email).to.equal(validUser.email);
done();
});
});
});
});
UserModel.js
UserSchema.statics.findOneByEmail = function(email, callback) {
this.findOne({email: email}, function (err, user) {
if (err) {
return callback(systemError());
}
if (!user) {
return callback(fileNotFoundError());
}
return callback(null, user);
});
};
【问题讨论】:
-
你能显示
User.findOneByEmail函数的列表吗?我认为这可能是麻烦的根源。也许它会抛出错误,并且在此函数上停止执行脚本。 -
我已经添加进去了。我在代码的其他部分使用了相同的函数,它按预期工作,只是在测试环境中没有得到任何响应。
-
你应该使用“user.findOneByEmail”,因为你已经在“user”中注入了“User”类。
-
啊,在我为 SO 做好准备时,这是一个错字。现在更新问题,谢谢。 (但没有任何区别)。
-
尝试在回调中控制台记录用户对象,可能它没有属性“findOneByEmail”。
标签: javascript node.js