在Mocha中使用EJS测试渲染视图

时间:2017-02-21 15:36:51

标签: node.js unit-testing testing mocha ejs

我已经完成了构建一个CRUD应用程序,其中包含20个测试通过。我使用EJS渲染视图,现在我的测试有问题。

作为一个简单的例子,让我说我正在检查当一个GET请求被发送到'/'时,JSON会像res.json({message:'hello'})那样被发送,所以我可以在Mocha中设置我的测试所以res.body.message等于'你好'。

但是,如果我想呈现index.ejs页面而不是发送JSON,该怎么办?所以它看起来像res.render('index',{message:'hello'})。我该如何测试res.render()?或者更具体地说,我如何测试传递给res.render()的对象?

编辑:此问题的解决方案(以及此类问题)可以通过使用名为功能测试的测试范例来解决。谷歌吧。

1 个答案:

答案 0 :(得分:1)

测试http get 基本上可以理解为需要测试路由。 因此,您的测试应该包含一个expect子句(关于在寻找路由时会发生什么)以及对validate的响应,在这种情况下是一个JSON对象。

使用Mocha,您可以将测试描述为

 it('should respond with JSON data', function (done) {
  request(server)
    .get('/about/jv')
    .expect(200)
    .end(function (err, response) {
      assert.equal(response.header['content-type'], 'application/json; charset=utf-8');
      assert.deepEqual(response.body, {
        "data":{
        "username":"hello"}
      });
      done();
    });
});

因为您需要服务器来运行针对'supertest'的http请求,所以使用节点包启动'server.js'以初始化服务器并使用请求(服务器)进行测试。

检查this - GitHub仓库具有此要求的完整测试模板。它还测试了返回的JSON对象。