Mocha:如何测试Express渲染视图

时间:2015-04-17 09:42:37

标签: node.js testing rendering mocha

- 背景

我正在尝试测试Express应用程序。这对我来说是一个爱好项目,所以我没有使用Express来提供JSON api(通常这样做)。

- 问题

问题是,我无法找到一种方法来测试视图的内容,以确保页面实际上是针对项目本身的视图文件呈现的。

- 我尝试过什么

例如,我无法测试简单的索引页面,因为jade文件以extends layout开头。这使得测试动态内容是否很难进行测试。

是否有人建议测试视图是否实际呈现?

it ('renders the index page', function(done) {
  var jade = require('jade');
  var should = require('should');
  var fs = require('fs');

  supertest(app)
    .get('/')
    .expect(200)
    .end(function(err, res) {
      var rawJade = fs.readFileSync('./views/index.jade').toString();
      res.text.should.equal(rawJade.convertToHtml()); // jade supports a function like this
    });
)};

1 个答案:

答案 0 :(得分:1)

像往常一样,有几种方法可以解决这个问题。在我继续之前,我鼓励你问问自己为什么需要这样做。像这样的测试是非常易变的。如果你做了一些微小的改变,它将迫使你重写现在失败的测试。

那就是说,我认为开始添加断言正确渲染的测试的最简单方法是使用https://github.com/cheeriojs/cheerio

基本示例如下所示:



it ('renders the index page', function(done) {
  var should = require('should');
  var cheerio = require('cheerio');

  supertest(app)
    .get('/')
    .expect(200)
    .end(function(err, res) {
      err.should.not.be.ok();
      res.should.be.ok();
    
      var $ = cheerio.load(res.body);
      var header = $('h1:first');
      header.should.equal('Hello World!');
    
      done();
    });
)};




现在你还没有测试渲染的视图是否与你想要的完全一样(我的意思是你可以,但那将是乏味的)。但这也意味着,如果你做出一些微小的微不足道的改变,整个事情就不会崩溃。相反,您可以专注于测试UI的关键方面是否正确呈现(例如页面的标题是否存在,具有正确的拼写和类/ id属性)