我已经完成了构建一个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()
的对象?
编辑:此问题的解决方案(以及此类问题)可以通过使用名为功能测试的测试范例来解决。谷歌吧。
答案 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对象。