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

NodeJS - Testing model, not receiving callback

本文关键字:回调 测试 模型 NodeJS-      更新时间:2023-09-26

我在node中遇到了一些mocha测试的问题-我正在测试一个模型并调用该模型的方法来获得响应-简单地说就是model.findOne方法。

在主代码库中,它按预期返回(就像在数据库中查询时一样),但在测试时,它无法到达回调,测试刚好超时。。有什么想法吗?

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);
    });
};

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

Mongoose connect函数支持回调。

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