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。所以:

  1. 确保您的 home/index.ejs 视图确实包含 <%= message %> 某处。
  2. 将您的测试更改为 assert(res.text.match(/hello/)) 之类的内容,以检查是否存在应在渲染视图中替换 <%= message %> 的 "hello" 字符串。