我们正在使用spec.js文件测试我们的环回API代码,如下所示:
需要libs:
var app = rewire('../..');
var request = require('supertest');
var assert = require('chai').assert;
json helper方法,用于标准化标题和内容类型:
function json(verb, url) {
return request(app)[verb](url)
.set('Content-Type', 'application/json')
.set('Accept', 'application/json')
.expect('Content-Type', /json/);
}
需要身份验证的自定义远程方法的测试:
describe("Order remote methods", function() {
var accessTokenId, userId;
// authenticate before each test and save token
before(function(done) {
json('post', '/api/People/login')
.send({ email: 'user@email.com', password: 'password' })
.expect(200)
.end(function(err, res) {
accessTokenId = res.body.id;
userId = res.body.userId;
assert(res.body.id);
assert(res.body.userId);
done();
});
});
it("should fetch user orders", function(done) {
json('get', '/api/Orders/specialOrders')
.set('Authorization', accessTokenId)
.send({id: userId})
.expect(200)
.end(function(err, res) {
var orders = res.body.orders;
assert(Array.isArray(orders), "Orders should be an array");
// more asserts for explicit data values
done();
});
});
});
/api/Orders/specialOrders
是一个自定义远程方法,可以对Order模型执行自定义查询,该方法按预期工作。但是,当我为此模型添加beforeRemote
挂钩时, 不会通过运行测试触发它。 这是预期的还是我的测试设置未完成?
远程钩子:
Order.beforeRemote('specialOrders', function(ctx, unused, next) {
console.log('[userOrders]');
console.log('ctx req token: ', ctx.req.accessToken.userId);
console.log('ctx args: ', ctx.req.params.id);
// prevent remote method from being called
// even without a next(), remote is executed!
next(new Error('testing error'));
});
通过Explorer UI运行相同的自定义方法,beforeRemote
挂钩按预期触发,并报告自定义错误(或在next()
不存在时挂起)。
是否有可能在这样的测试中触发远程挂钩,或者我在spec文件中缺少一些app
设置?