调用server.inject()POST请求不在Hapi.js中调用处理程序

时间:2016-05-17 14:22:50

标签: testing hapijs

我有一个像这样的Jasmine测试规范test_spec.js:

describe('my tests', () => {
  it('POST should return 201 created', () => {
    var req = {
      method: 'POST',
      url: '/api/v1.0/message',
      payload: JSON.stringify({name: 'Ethan'})
    };
    server.inject(req, res => {
      expect(res.statusCode).to.equal(201);
    });
  });
});

API调用的路径如下所示:

var routes = [{
  path: '/api/v1.0/message',
  method: 'POST',
  handler: function(request, reply) {
    reply('Success').created();
  }
}];
exports.register = function(server, options, next) {
  server.route(routes);
  next();
}

但是,当我运行测试时,这个特定测试的expect()函数不会被调用,因为server.inject()方法没有调用响应回调。事实上,甚至没有调用路由处理程序方法(我使用console.log语句检查)。但是,当我更改请求方法和从POST到GET的路由时,它可以工作,测试按预期调用expect()方法。该测试不适用于POST请求。我做错了吗?

1 个答案:

答案 0 :(得分:2)

原来问题出在我的问题中发布的测试电话describe()片段中。我忽略了在done()调用中调用server.inject()函数。一旦我添加了,就开始调用POST测试:

describe('my tests', () => {
  it('POST should return 201 created', (done) => {
    var req = {
      method: 'POST',
      url: '/api/v1.0/message',
      payload: JSON.stringify({name: 'Ethan'})
    };
    server.inject(req, res => {
      expect(res.statusCode).toEqual(201);
      done();
    });
  });
});

从Jasmine文档中,我不需要调用done()回调。调用是必要的,以便推迟规范完成,直到调用done()(表示已发布有效负载)。