我的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)
关于可能导致这种情况的任何想法?
答案 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逻辑。
希望这有帮助!