【问题标题】:Mocha: How to test Express rendered viewsMocha:如何测试 Express 渲染视图
【发布时间】:2015-06-24 02:22:29
【问题描述】:

-- 背景

我正在尝试测试 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
    });
)};

【问题讨论】:

    标签: node.js testing rendering mocha.js


    【解决方案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 属性)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2017-12-07
      相关资源
      最近更新 更多