Как правильно заглушить возвращаемое значение функции?
- Предпосылка : JS ES6, NodeJS
- Тестирование Framework: TAP
- Библиотека издевательств : testdouble.js
Я пытаюсь смоделировать возвращаемое значение для метода моего класса и продолжаю получать эту ошибку:
не в порядке Неудовлетворенная проверка на двойном испытании. Разыскивается: - звонил с
(true)
, Но не было никаких вызовов теста дважды.
Вот мой тестовый код:
// Imports for unit testing
const tap = require('tap');
const Subject = require('../src/iTunesClient.js');
const td = require('testdouble');
let reqJson;
// Ensure the iTunes class methods are called
tap.test('iTunesClient class methods function as intended', (t) => {
t.beforeEach((ready) => {
reqJson = td.replace('../src/reqJson.js');
ready();
});
t.afterEach((ready) => {
td.reset();
ready();
});
t.test('iTunesClient.getData', (assert) => {
const callback = td.function();
const subject = new Subject();
subject.setTerm('abc 123');
subject.setURL();
td.when(reqJson.get(td.callback)).thenCallback(true);
subject.getData(callback);
td.verify(callback(true));
assert.end();
});
t.end();
});
В частности, эта строка связана с моей проблемой:
td.verify(callback(true));
Как я могу подделать значение обратного вызова true
за reqJson.get()
? Прямо сейчас, Subject.geData()
это метод iTunesClient
класс, который вызывает другой файл, reqJson.js
, чтобы использовать его на экспорт get()
метод.
2 ответа
Я хотел обновить этот вопрос, так как я недавно решил эту проблему. По сути, у меня было две проблемы:
- Учет обоих параметров функции reqJson
- Учет всех возвращаемых значений обратного вызова
Для теста двойная документация по пункту 1:
При передаче td.matchers.anything() любой вызов этой двойной тестовой функции будет игнорировать этот параметр при определении, удовлетворяет ли вызов заглушке.
Поэтому я скорректировал свою строку кода следующим образом:
До: td.when(reqJson.get(td.callback)).thenCallback(true);
После: td.when(reqJson.get(td.matchers.anything(), td.callback)).thenCallback(null, null, null);
Это немного трудно понять из вашего примера, но похоже, что вы требуете iTunesClient
прежде чем позвонить td.replace
, В этом случае реальный reqJson
модуль будет необходим и кэширован в строке 3.
Вам нужно позвонить td.replace
достаточно рано, чтобы избежать этого, например, между tap
а также iTunesClient
,