Javascript sails.controller.booking.approve(…)不是一个函数
我正在尝试使用mocha对Sails.js项目的控制器进行单元测试。 因为我有不同的安全策略,所以我不能通过实际调用url使用或类似的测试框架来测试控制器。我必须确保调用的参数通过所有策略 相反,我尝试直接使用Javascript sails.controller.booking.approve(…)不是一个函数,javascript,unit-testing,sails.js,mocha.js,sinon,Javascript,Unit Testing,Sails.js,Mocha.js,Sinon,我正在尝试使用mocha对Sails.js项目的控制器进行单元测试。 因为我有不同的安全策略,所以我不能通过实际调用url使用或类似的测试框架来测试控制器。我必须确保调用的参数通过所有策略 相反,我尝试直接使用sails.controllers.[controller].[methods](req,res)调用控制器的方法,就像建议的那样,并使用监视res对象 但是每当我调用控制器方法,例如sails.controllers.booking.approve(req,res)时,我都会收到错误消息
sails.controllers.[controller].[methods](req,res)
调用控制器的方法,就像建议的那样,并使用监视res
对象
但是每当我调用控制器方法,例如
sails.controllers.booking.approve(req,res)
时,我都会收到错误消息TypeError:sails.controllers.booking.approve(…)不是一个函数
。如何调用controller方法?NPM安装Mocha、Grunt Mocha Test、Sinon和Assert库
我修改了项目根目录下的Gruntfile.js以使用Grunt Mocha测试
grunt.initConfig({
mochaTest: {
test: {
options: {
reporter: 'spec'
},
src: ['tests/**/*.spec.js']
}
},
...
});
然后添加并注册任务以运行测试:
grunt.loadNpmTasks('grunt-mocha-test');
grunt.registerTask('test', ['mochaTest']);
示例:AboutController.js
module.exports = {
index: function (req, res) {
return res.view();
},
_config: {}
};
var AboutController = require('../../api/controllers/AboutController'),
sinon = require('sinon'),
assert = require('assert');
describe('The About Controller', function () {
describe('when we load the about page', function () {
it ('should render the view', function () {
var view = sinon.spy();
AboutController.index(null, {
view: view
});
assert.ok(view.called);
});
});
});
测试内部测试/控制器并将其命名为about.spec.js
module.exports = {
index: function (req, res) {
return res.view();
},
_config: {}
};
var AboutController = require('../../api/controllers/AboutController'),
sinon = require('sinon'),
assert = require('assert');
describe('The About Controller', function () {
describe('when we load the about page', function () {
it ('should render the view', function () {
var view = sinon.spy();
AboutController.index(null, {
view: view
});
assert.ok(view.called);
});
});
});
据我所知,在global sails对象中公开的不仅仅是模型和服务吗?是的,只有模型和服务作为全局变量公开。这意味着没有全局控制器,例如
RabbitController
,但您仍然可以使用全局sails
对象(如sails.controllers.rabbit.[action]
)访问控制器。感谢您的详细解释。奇怪的是,当我将req
对象放入方法调用时,比如AboutController.index(req,res)
,我得到一个AboutController.index(…)不是一个函数
错误。是的,它现在正在工作!感谢您添加了摩卡咕噜任务。我只是在should.js中使用摩卡咖啡。