我使用supertest,mocha和expect来测试我的应用程序。我遇到一个问题,返回的文档为空,并且没有错误。
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);
});我需要做些什么才能让它工作吗?
发布于 2016-02-24 16:12:08
我对测试做了一些修改,在“之前”上创建了用户。
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运行的,并相应地表现出来。
https://stackoverflow.com/questions/35595296
复制相似问题