Ошибка: Превышен тайм-аут в 30000мс. Для асинхронных тестов и подключений убедитесь, что «сделано ()». Несмотря на использование resolve для синон

#javascript #node.js #sinon #assert #sinon-chai

Вопрос:

Я пытаюсь утверждать, что AddressesController выполняет вызов get со сканера, который заглушен. Но я продолжал получать сообщение об ошибке ниже.

Попытался добавить в него «сделано» ( » , (сделано) => {})

 Error: Resolution method is overspecified. 
Specify a callback *or* return a Promise; not both
 

На самом деле я не знаю, что я делаю не так, так как я довольно новичок в тестировании синон-чай.

 Error: Timeout of 30000ms exceeded. For async tests and hooks, ensure "done()" 
is called; if returning a Promise, ensure it resolves.
 
 const assert = require('assert');
const moment = require('moment');
const config = require('config');
const sinon = require('sinon');

const scanner = require('../../modules/scanner');

const scannerStub = sinon.stub(scanner, 'getReport');
describe('verifyByOTP()', () => {
    before(async () => {
      scannerStub.reset();
    });
    
    it('should be success to verify address by OTP', async () => {
      const verifiedOTPUser = 'user';
      const address = '17W8yHeDqN6gZT';
      const response = {
        id: 'ff9bf0b0-218f-4995-8011-366e516a5765',
        error: null,
        risk_score: null,
        risk_score_detail: { source: null, destination: null },
      };
      scannerStub.resolves(response);

      const whitelistedAddress = await AddressesController.verifyByOTP(verifiedOTPUser, address);

      assert.notStrictEqual(whitelistedAddress.activatedAt, null);
      assert.strictEqual(whitelistedAddress.status, 'PENDING');
      assert.strictEqual(whitelistedAddress.address, address);
    });
  });
}
 

Комментарии:

1. Вы пробовали it('...', async (done) => { , а потом, после последнего assert.strictEqual(...); done(); ?

2. @Molda Да, попробовал, что дало мне » Ошибку: метод разрешения переопределен. Укажите обратный вызов или верните обещание; не то и другое вместе. в Context.it (тест/контроллеры/адресыконтроллер.тест.js:580:7) в процессе. _tickCallback (внутренний/процесс/next_tick.js:68:7)`

3. Я думаю, вам нужно издеваться над фактическим запросом GET, который выполняется в verifyByOTP методе, вместо того, чтобы действительно выполнять его. Если звонок осуществляется в сканере getReport способ тогда, я думаю, что происходит заключается в том, что метод получает ушиб поздно это означает, что, когда моча начинает работать тестовых случаев он загружает AddessesController прежде чем сканер getReport метод получает ушиб -значит, решение в этом случае будет либо пройти сканер в качестве параметра verifyByOTP метода или играть с require тем, чтобы заглушка сканера способ Прежде, чем он импортируется в файл контроллера

4. @SebastianKaczmarek Я попробовал ваше предложение и переместил импорт сканера выше импорта адресного контроллера, и я добавил консоль. войдите в сканер. Можно убедиться, что сканер не был вызван как консоль. журнал не печатался ни до, ни после перемещения.