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

Calling server.inject() POST request not calling handler in Hapi.js

我有一个像这样的 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 请求。我做错了吗?

原来问题出在我的问题中发布的测试调用 describe() 片段中。我忽略了在 server.inject() 调用中调用 done() 函数。添加后,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()(意味着有效负载已发布)。