如何在摩卡框架中纠正这个测试案例?

问题描述:

我正在尝试为使用摩卡作为测试框架的节点应用程序编写测试用例。如何在摩卡框架中纠正这个测试案例?

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

当这样做的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