#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 Я попробовал ваше предложение и переместил импорт сканера выше импорта адресного контроллера, и я добавил консоль. войдите в сканер. Можно убедиться, что сканер не был вызван как консоль. журнал не печатался ни до, ни после перемещения.