为什么我收到“测试完成后无法登录?”

boi*_*ing 8 jestjs feathersjs

这是我第一次尝试开玩笑。我正在尝试为我的服务运行“stock”测试,即,feathersjs 在通过 cli 创建服务时为您设置的测试。该服务使用带有回调的异步函数,作为最后一步,我在控制台中进行了一些日志记录。我收到错误:“测试完成后无法记录。您是否忘记在测试中等待某些异步内容?” 我怀疑测试在退出之前不会等待回调完成,因此当回调执行时会在测试完成后尝试记录。

这是库存测试:

  it('registered the service', () => {
    const service = app.service('order');
    expect(service).toBeTruthy();
  });
Run Code Online (Sandbox Code Playgroud)

我尝试了文档中提到的一些技术,例如 async/await:

  it('registered the service', async () => {
    const service = await app.service('order');
    expect(service).toBeTruthy();
  });
Run Code Online (Sandbox Code Playgroud)

我尝试使用“完成”:每次我都会收到相同的错误消息。

这是执行日志记录的服务代码部分:

  amqp.connect(amqp_url, (err0, conn) => {
    if(err0) {
      throw(err0);
    }

    conn.createChannel((err1, ch) => {
      if(err1) {
        throw(err1);
      }

      ch.assertQueue(orchToOrderQName);
      ch.consume(orchToOrderQName, function(msg) {
        ch.ack(msg);
        service.emit('create', msg);
      });
      orchToOrderChannel = ch;
    });

    conn.createChannel((err1, ch) => {
      if(err1) {
        throw(err1);
      }

      ch.assertQueue(orderToOrchQName);
      orderToOrchChannel = ch;
  
      console.log(" [*] Order is consuming messages from %s.", orchToOrderQName);
    });

  });
Run Code Online (Sandbox Code Playgroud)

我需要找到一种方法让测试等待回调,但也许问题出在其他地方。

vin*_*zee 0

我可以通过更改库存测试来解决这个问题:

service = null;
beforeAll(async () => {
    service = await app.service('order');
});

it('registered the service', () => {
    expect(service).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)

我不再收到有关日志记录的错误消息。


此答案作为对问题的编辑发布,为什么我收到“测试完成后无法登录?” 由 OP boing根据 CC BY-SA 4.0 进行。