2017-05-11 3 views
0

私のbootstrap.test.jsファイルは以下の通りです。SailsJs&Mocha: "policy.bindは関数ではありません"

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

次のように非常に単純なモーダルテストは、テスト/統合/コントローラ/ 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(); 
 

 

 
    }); 
 
    }); 
 

 
});

私は次のようにモカのテストを実行してみてください。

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) 

これにつながる可能性のあるアイデアはありますか?

答えて

0

今後同じエラーが発生する可能性がある人は、エラーの原因は私が使用していたsails-mustミドルウェアの使用でした。私のpolicies.jsファイルには、次のようなルールがありました。

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

上記の行を削除すると、テストが実行されました。私はこれがエラーの原因に関する完全な答えではないことを知っています。しかし、同じ問題を抱えている他の人にとっては、役に立つはずです。

ACLロジックを作成するには、this SO threadに記載されているアプローチに切り替えました。

希望すると便利です。

関連する問題