2016-02-24 204 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的新手,我很想知道是什麼原因導致文檔在內存中創建,以及貓鼬/表示如何知道它是由測試/超級用戶運行並相應地運行。