我正在使用supertest,mocha并期望测试我的应用程序。我遇到了一个问题,即返回的文件是null并且没有错误。
router.get('/user', function (req, res) {
User.findOne({
_id: '56c59bb07a42e02d11a969ae'
}, function (err, user) {
if(err) return res.status(404).json({message: 'not found: ' + err.message});
res.status(200).json(user);
});
});
当我在Postman上测试时,我总是得到200这是我的预期但是当我运行测试时我得到404 :(
我在下面的简单测试代码中总是得到404。
it('get user', function (done) {
request(app)
.get('/user')
.expect(200)
.end(function (err, res) {
if (err) throw err;
done();
});
});
Postman和测试都指的是同一个mongoose数据库,因此我确信它应该能够获取用户。如何在我的服务器中设置mongoose和应用程序。
mongoose.connect('mongodb://localhost/scratch', options);
app.listen(port, function () {
console.log('Scratch started on port ' + port);
});
我需要做些什么才能让它发挥作用吗?
答案 0 :(得分:0)
我在'之前'创建了用户的位置修改了测试。
before(function (done) {
connection.on('error', console.error);
connection.once('open', function () {
done();
});
mongoose.connect(config.db[process.env.NODE_ENV]);
var userInfo = {
"username": "naz2@gmail.com",
"password" : "123456",
"nickname": "naz"
}
var newUser = User(userInfo);
newUser.save(function (err, doc) {
if(err) {
console.log('err: ' + err.message);
} else{
console.log('saved');
}
})
console.log(mongoose.connection.readyState);
done();
});
然后运行相同的测试,它工作了!
我的猜测是,在测试期间,应用程序正在查询内存中的文档(我通过检查数据库并且未添加新用户来验证),而不是像我在使用Postman测试时期望的现有文档。这意味着我需要先将测试数据库播种,然后再将其用于测试。
我是Nodejs的新手,我很好奇是什么导致文件在内存中创建,以及mongoose / express如何知道它是由test / supertest运行并且相应的行为。