2013-04-04 45 views
0

我正在嘗試爲使用摩卡作爲測試框架的節點應用程序編寫測試用例。如何在摩卡框架中糾正這個測試案例?

test.js

var register = require('../routes/users'); 
var request = require('request'); 
var baseUrl = 'http://localhost:5000'; 

describe('registerUser()', function() { 

    it('check email is already registered', function (done) { 
     request.post({uri:baseUrl+'/register', form :{ 
      username: 'test', 
      email: '[email protected]' 
     }}, function (e, res, body) { 
      res.should.have.property('statusCode', 201); 
      res.should.have.property('regErr', 'This email is already taken!'); 
     }) 
    }); 

}) 

regErr在渲染功能registerUser被給定爲參數。我預計參數regErr將被設置爲響應屬性,並且可以通過測試。 請在github中檢查我的registerUser function。 我想爲這個函數創建一個測試用例。

上面的代碼在測試用例中沒有提供返回的屬性regErr

如何更正以便渲染參數也可以作爲響應屬性?

我需要改變實際功能registerUser才能得到這個嗎?如果是這樣,我該如何做到這一點?

+0

您是否嘗試過記錄e,res和body?我從來沒有使用請求,但我認爲這通常設置在e.body或其他東西。 – kimpettersen 2013-04-04 14:33:10

回答

0

當這樣做的HTTP請求,回調函數調用與三個參數:

  • ERR(可能的錯誤返回)
  • RES(HttpRequest對象)
  • 體(所得體的緩衝液)

因此,regErr在體變量中。而且由於你正在渲染一個HTML頁面,你必須自己解析身體才能找到它。一個可能的解決方案是呈現JSON並在生成的主體緩衝區上使用JSON.parse()。

+0

如何解析body變量? body變量包含頁面的整個html元素。如果我需要傳遞JSON,那麼我需要發送響應'res.json({..})'。那麼我怎樣才能渲染頁面中的所有html元素? – 2013-04-05 11:08:11

+0

@JustinJohn:你可以用正則表達式來解析它,但更理想的選擇是用「單元測試」模式啓動服務器時用res.json替換res.render。 – red 2013-04-05 13:55:41