首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Supertest mongoose查询问题

Supertest mongoose查询问题
EN

Stack Overflow用户
提问于 2016-02-24 14:57:19
回答 1查看 813关注 0票数 0

我使用supertest,mocha和expect来测试我的应用程序。我遇到一个问题,返回的文档为空,并且没有错误。

代码语言:javascript
复制
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。

代码语言:javascript
复制
it('get user', function (done) {
        request(app)
            .get('/user')
            .expect(200)
            .end(function (err, res) {

                if (err) throw err;
                done();
            });
});

Postman和测试都引用相同的mongoose数据库,因此我确信它应该能够获取用户。下面是如何在我的服务器上设置mongoose和应用程序。

代码语言:javascript
复制
mongoose.connect('mongodb://localhost/scratch', options);

app.listen(port, function () {
    console.log('Scratch started on port ' + port);
});

我需要做些什么才能让它工作吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-24 16:12:08

我对测试做了一些修改,在“之前”上创建了用户。

代码语言:javascript
复制
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运行的,并相应地表现出来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35595296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档