摩卡:如何testing快速渲染视图

– 背景

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

– 问题

问题是,我找不到一种方法来testing视图的内容,以确保页面实际上是在项目本身的视图文件中呈现。

– 我试过了

例如,我不能testing一个简单的索引页面,因为jade文件以extends layout开始。 这使得难以testingdynamic内容是否呈现。

有没有人有testing视图是否真的被渲染的build议?

 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 }); )}; 

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

这就是说,我认为最简单的方法来开始添加testing,断言适当的呈现与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(); }); )};