我在节点中遇到了一些mocha测试的问题 - 我正在测试一个模型并调用模型的方法来获得响应 - 简单地说就是Model.findOne方法。
在主代码库中它按预期返回(就像在数据库中查询时那样),但是在测试时它无法到达回调并且测试只是超时...任何想法可能会出现什么问题?< / p>
Mocha的输出:
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);
});
};
答案 0 :(得分:1)
我可以看到,你正在使用猫鼬。因此,在开始测试之前,您必须先连接到您的mongodb。例如,您可以在before
部分中执行此操作。
Mongoose connect函数支持回调。
before(function (done) {
mongoose.connect('mongodb://localhost/test', done);
});