2015-11-09 3 views
0

У меня проблема с некоторыми тестами мокко в узле - я тестирую модель и вызываю метод модели, чтобы получить ответ - просто метод Model.findOne.NodeJS - Модель тестирования, не получающая обратный вызов

В основной базе кода он возвращается, как и ожидалось, (как и при запросе в базе данных), но при тестировании он не достигает обратного вызова, а тесты просто тайм-аут .. любые идеи, что может быть проблемой?

Выход из Mocha:

1) user model tests check user exists email should equal input: [email protected]: 
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: '[email protected]', 
 
    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

Вы можете показать список функций 'User.findOneByEmail'? Я думаю, что это может быть причиной неприятностей. Возможно, это порождает ошибку, и выполнение этой функции останавливается на этой функции. – vodolaz095

+0

Я добавил его. Я использую ту же функцию в других частях кода, и он работает так, как ожидалось, я просто не получаю никакого ответа в тестовой среде. –

+0

Вы должны использовать «user.findOneByEmail», потому что вы уже ввели «Пользователь» в «user». – sayume

ответ

1

Как я вижу, вы используете мангуст. Таким образом, перед началом тестов вы должны сначала подключиться к своему mongodb. Например, вы можете сделать это в разделе before.

Функция Mongoose connect поддерживает обратный вызов.

before(function (done) { 
    mongoose.connect('mongodb://localhost/test', done); 
}); 
Смежные вопросы