我正忙於爲我寫的現有nodejs api構建功能測試。我正在使用摩卡和expect.js。用摩卡測試Node.js api
一個失敗的測試是當我想對url參數的存在做一個負面測試時。我想要的是如果param丟失,則將消息發回服務的使用者。
目前正測試我的作品:
var request = require('request');
it('get a specific user from the api', function (done) {
request.get('http://localhost:8080/api/v1/user/123', function (error, response, body) { ... });
});
但是,下列不工作,我得到的是一個超時:
it('should return a 400 message if UserId is not supplied stating that "UserId expected"', function(done) {
request.get('http://localhost:8080/api/v1/user/', function (error, response, body) {
if (!error && response.statusCode == 400) {
expect(body).to.be.equal('UserId expected');
done();
}
});
});
兩個以上的測試正在測試該端點:
app.get('/api/v1/user/:userid', function (req, res) {
if(!req.params.userid) {
return res.status(400).json('UserId expected');
}
... get the user and return it with status 200 ...
});
但是,如前所述,第一次測試成功,而第二次測試超時。
更新1: 此外,我得到了以下的輸出:
GET /api/v1/user/123 200 2.905 ms - 274
GET /api/v1/user/ - - ms - -
更新2: 所以添加以下代碼解決了這個問題,但並沒有真正解決問題:
app.get('/api/v1/user', function (req, res) {
return res.status(400).json('UserId expected');
});
顯然,我不想要一個相當冗餘的代碼片段。我很困惑,爲什麼我不能進入'api/v1/user /:userid'端點,只是在那裏測試:userid
的存在?就好像nodejs需要存在:userid
,否則端點不存在。它是否正確?
我錯過了什麼?
如果服務器回來了什麼東西,你會不會?你可以在這兩個網站上添加一些console.log/breakpoints來查看它被粘貼的位置嗎?你怎麼知道你的第一個測試成功沒有斷言,或者你剛剛把它切斷? – Sprotte
我在服務器和測試中都添加了console.log,我沒有收到服務器的響應。我認爲請求必須陷入服務器端,但我無法確定服務器端點的第一行有console.log,但它永遠不會被觸發。 – Ebbs