Strongloop Loopback远程挂钩不是用supertest触发的?

时间:2015-12-14 19:38:48

标签: javascript mocha loopbackjs strongloop supertest

我们正在使用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设置?

0 个答案:

没有答案