NodeJS - 测试模型,不接收回调

时间:2015-11-09 07:00:46

标签: javascript node.js

我在节点中遇到了一些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);
    });
};

1 个答案:

答案 0 :(得分:1)

我可以看到,你正在使用猫鼬。因此,在开始测试之前,您必须先连接到您的mongodb。例如,您可以在before部分中执行此操作。

Mongoose connect函数支持回调。

before(function (done) {
   mongoose.connect('mongodb://localhost/test', done);
});