Supertest mongoose查询问题

时间:2016-02-24 06:57:19

标签: node.js express mongoose supertest

我正在使用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);
});

我需要做些什么才能让它发挥作用吗?

1 个答案:

答案 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运行并且相应的行为。