【问题标题】:Supertest mongoose query issue超测猫鼬查询问题
【发布时间】:2016-02-24 06:57:18
【问题描述】:

我正在使用 supertest、mocha 并期望测试我的应用程序。我遇到了返回的文档为空且没有错误的问题。

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();
            });
});

邮递员和测试都引用同一个猫鼬数据库,所以我确信它应该能够获取用户。 mongoose 和应用程序是如何在下面我的服务器中设置的。

mongoose.connect('mongodb://localhost/scratch', options);

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

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

【问题讨论】:

    标签: node.js express mongoose supertest


    【解决方案1】:

    我稍微修改了在“之前”创建用户的测试。

    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 如何知道它是由测试/超级测试运行并相应地运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-10
      • 2020-06-02
      • 2012-02-03
      • 2021-03-17
      • 2021-03-23
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多