Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript sails.controller.booking.approve(…)不是一个函数_Javascript_Unit Testing_Sails.js_Mocha.js_Sinon - Fatal编程技术网

Javascript sails.controller.booking.approve(…)不是一个函数

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)时,我都会收到错误消息

我正在尝试使用mocha对Sails.js项目的控制器进行单元测试。 因为我有不同的安全策略,所以我不能通过实际调用url使用或类似的测试框架来测试控制器。我必须确保调用的参数通过所有策略

相反,我尝试直接使用
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中使用摩卡咖啡。