Sails js :: 测试传递给视图的变量
Sails js :: Testing variables passed to views
控制器
module.exports = {
index: function (req, res) {
res.view({message: 'hello'});
}
}
如何测试变量message
是否设置正确?
var request = require('supertest');
describe('HomeController', function() {
describe('index', function() {
it('should return success', function (done) {
request(sails.hooks.http.app)
.get('/')
.expect(200).end(function (err, res) {
if (err) throw err;
res.body.should.have.property('message');
done();
});
});
});
});
res.body
returns {}
我认为传递给您的视图函数的参数不正确。看起来您正在尝试 return 一个 JSON 对象。尝试改用 json 函数:
res.json({message: 'hello'});
如果您想将此对象传递给应用程序中的视图文件,您需要在函数的第一个参数中指定视图文件的路径:
res.view("viewfile", {message: 'hello});
您正在测试响应主体的 属性 为 message
,但这不是视图局部变量的工作方式:它们被传递给视图作为视图引擎可以替换的变量。如果您的视图中不存在该变量,则不会进行替换。此外,在 supertest 中使用 get
方法不会 return 默认为 res.body
;您需要改为检查 res.text
。所以:
- 确保您的
home/index.ejs
视图确实包含 <%= message %>
某处。
- 将您的测试更改为
assert(res.text.match(/hello/))
之类的内容,以检查是否存在应在渲染视图中替换 <%= message %>
的 "hello" 字符串。
控制器
module.exports = {
index: function (req, res) {
res.view({message: 'hello'});
}
}
如何测试变量message
是否设置正确?
var request = require('supertest');
describe('HomeController', function() {
describe('index', function() {
it('should return success', function (done) {
request(sails.hooks.http.app)
.get('/')
.expect(200).end(function (err, res) {
if (err) throw err;
res.body.should.have.property('message');
done();
});
});
});
});
res.body
returns {}
我认为传递给您的视图函数的参数不正确。看起来您正在尝试 return 一个 JSON 对象。尝试改用 json 函数:
res.json({message: 'hello'});
如果您想将此对象传递给应用程序中的视图文件,您需要在函数的第一个参数中指定视图文件的路径:
res.view("viewfile", {message: 'hello});
您正在测试响应主体的 属性 为 message
,但这不是视图局部变量的工作方式:它们被传递给视图作为视图引擎可以替换的变量。如果您的视图中不存在该变量,则不会进行替换。此外,在 supertest 中使用 get
方法不会 return 默认为 res.body
;您需要改为检查 res.text
。所以:
- 确保您的
home/index.ejs
视图确实包含<%= message %>
某处。 - 将您的测试更改为
assert(res.text.match(/hello/))
之类的内容,以检查是否存在应在渲染视图中替换<%= message %>
的 "hello" 字符串。