【问题标题】:SailsJs & Mocha : "policy.bind is not a function"SailsJs & Mocha:“policy.bind 不是函数”
【发布时间】:2017-05-11 09:51:34
【问题描述】:

我的 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);
});

tests/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)

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

【问题讨论】:

    标签: javascript sails.js mocha.js


    【解决方案1】:

    对于将来可能遇到相同错误的任何人,错误的原因是使用了我正在使用的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 逻辑。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2015-09-22
      • 1970-01-01
      • 2017-08-28
      • 2015-01-16
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 2016-03-03
      相关资源
      最近更新 更多