2016-02-24 157 views
0

我正在使用supertest,摩卡和期待测试我的应用程序。我遇到了返回的文档为空并且没有错误的问题。Supertest猫鼬查询问题

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

当我测试这对邮差我总是得到200这是我所期待的,但是当我运行测试,我得到404 :(

下面,我总是得到404

我简单的测试代码
it('get user', function (done) { 
     request(app) 
      .get('/user') 
      .expect(200) 
      .end(function (err, res) { 

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

两个邮差和测试指的是相同的猫鼬的数据库,所以我敢肯定,它应该能够获取用户。猫鼬和应用程序如何在我下面的服务器设置。

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

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

有什么我需要做的,以使其工作?

回答

0

我在'before'之前创建用户的地方修改了一下测试。

before(function (done) { 
      connection.on('error', console.error); 
      connection.once('open', function() { 
       done(); 
      }); 
      mongoose.connect(config.db[process.env.NODE_ENV]); 

      var userInfo = { 
       "username": "[email protected]", 
       "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(); 
     }); 

然后运行相同的测试,它的工作!

我的猜测是,在测试过程中,应用程序正在查询内存中的文档(我证实通过检查数据库并且未添加新用户),而不是像使用邮递员测试时那样预期的现有文档。这意味着我需要在测试前使用测试数据库。

我是Nodejs的新手,我很想知道是什么原因导致文档在内存中创建,以及猫鼬/表示如何知道它是由测试/超级用户运行并相应地运行。