SailsJs 和摩卡咖啡:"policy.bind is not a function"
SailsJs & Mocha : "policy.bind is not a function"
我的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)
有什么可能导致这种情况的想法吗?
对于以后可能遇到同样错误的任何人,错误的原因是我使用的 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 逻辑。
希望对您有所帮助!
我的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)
有什么可能导致这种情况的想法吗?
对于以后可能遇到同样错误的任何人,错误的原因是我使用的 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 逻辑。
希望对您有所帮助!