SailsJs&摩卡:" policy.bind不是一个函数"

时间:2017-05-11 09:51:35

标签: javascript sails.js mocha

我的bootstrap.test.js文件如下。



var Sails = require('sails');

before(function (done) {
    process.env.NODE_ENV = 'test';
    process.env.PORT = 9999;

    Sails.lift({
        models: {
            connection: 'localDiskDb',
            migrate: 'drop'
        }
    }, function (err, server) {
        sails = server;
        if (err) return done(err);

        sails.log.info('***** Starting tests... *****');
        console.log('\n');

        done(null, sails);
    });
});

after(function (done) {
    sails.lower(done);
});




test / integration / controllers / AuthController.spec.js提供了一个非常简单的模态测试,如下所示。



var assert = require('assert');

describe('PackagesModel', function() {

  describe('Sample Test1', function() {
    it('Sample test', function (done) {

      assert.equal(-1, [1,2,3].indexOf(4));
      done();


    });
  });

});




我尝试按如下方式运行mocha测试。

node ./node_modules/mocha/bin/mocha tests/bootstrap.test.js tests/integration/**/*.spec.js

这会导致以下错误。

   1) "before all" hook

  0 passing (1s)
  1 failing

  1)  "before all" hook:
     Uncaught TypeError: policy.bind is not a function
      at Object.policyHookDef.normalizePolicy (node_modules/sails/lib/hooks/policies/index.js:206:38)
      at normalize_each_policy (node_modules/sails/lib/hooks/policies/index.js:192:34)
      at arrayMap (node_modules/@sailshq/lodash/lib/index.js:1556:25)
      at Function.map (node_modules/@sailshq/lodash/lib/index.js:6886:14)
      at Object.policyHookDef.normalizePolicy (node_modules/sails/lib/hooks/policies/index.js:191:13)
      at node_modules/sails/lib/hooks/policies/index.js:172:59
      at node_modules/@sailshq/lodash/lib/index.js:3228:15
      at baseForOwn (node_modules/@sailshq/lodash/lib/index.js:2199:14)
      at node_modules/@sailshq/lodash/lib/index.js:3198:18
      at Function.<anonymous> (node_modules/@sailshq/lodash/lib/index.js:3501:13)
      at node_modules/sails/lib/hooks/policies/index.js:167:11
      at node_modules/@sailshq/lodash/lib/index.js:3228:15
      at baseForOwn (node_modules/@sailshq/lodash/lib/index.js:2199:14)
      at node_modules/@sailshq/lodash/lib/index.js:3198:18
      at Function.<anonymous> (node_modules/@sailshq/lodash/lib/index.js:3501:13)
      at Hook.policyHookDef.buildPolicyMap (node_modules/sails/lib/hooks/policies/index.js:150:9)
      at Hook.wrapper [as buildPolicyMap] (node_modules/@sailshq/lodash/lib/index.js:3250:19)
      at Hook.policyHookDef.bindPolicies (node_modules/sails/lib/hooks/policies/index.js:67:27)
      at Sails.wrapper (node_modules/@sailshq/lodash/lib/index.js:3250:19)
      at Sails.emitter.emit (node_modules/sails/lib/app/private/after.js:50:11)
      at Router.flush (node_modules/sails/lib/router/index.js:360:9)
      at Router.wrapper [as flush] (node_modules/@sailshq/lodash/lib/index.js:3250:19)
      at Router.load (node_modules/sails/lib/router/index.js:136:8)
      at Array.wrapper (node_modules/@sailshq/lodash/lib/index.js:3250:19)
      at listener (node_modules/sails/node_modules/async/lib/async.js:600:42)
      at node_modules/sails/node_modules/async/lib/async.js:542:17
      at _arrayEach (node_modules/sails/node_modules/async/lib/async.js:85:13)
      at Immediate.taskComplete (node_modules/sails/node_modules/async/lib/async.js:541:13)

关于可能导致这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

对于将来可能遇到相同错误的任何人,错误的原因是我正在使用的sails-must中间件的使用。在我的policies.js文件中,我有如下规则。

MyController: {
    createStatement : ['isAuthenticated',must().have(runner).priviledge],
    getStatement :['isAuthenticated',must().have(driver).priviledge.or.have(clerk).priviledge]
  },

当删除上述行时,测试运行。我知道这不是错误原因的完整答案。但是对于遇到同样问题的其他人来说应该是有用的。

我切换到this SO thread中提到的方法来制作我的ACL逻辑。

希望这有帮助!