У меня проблема с модульными тестами в проекте javascript (реакция). Требуется проверить класс ApiClient. Для этого мне придется изолировать настройкиApi, HttpClient и ресурсы. Я использую инструменты: мокка, чай, синус
Я также пытался использовать rewire, и я не мог. Я уже читал, что это может быть из-за babel.
Я пробовал такие заглушки:
sinon.stub(ApiClient.prototype, 'constructor');
У кого-нибудь была эта проблема, можете ли вы дать мне руку?
Ниже приведена часть кода:
Файл ApiClient.js
import settingsApi from '../../settings/api.json';
import HttpClient from './HttpClient';
import resources from './resources';
class ApiClient {
constructor() {
this.httpClient = new HttpClient(settingsApi);
}
get flux() {
return new resources.resourceOne(this.httpClient);
}
}
export default ApiClient;
FileHttpClient.js
class HttpClient {
/**
*
* @param {*} config
*/
constructor(config) {
this.basePath = '${config.protocol}://${config.host}:${config.port}';
}
post(resource, options = {}, formatResponse) {
return this.request({
method: 'POST',
resource,
options,
formatResponse
});
}
export default HttpClient;
Я уже мог решить свою проблему, я использовал плагин babel-plugin-rewire (https://github.com/speedskater/babel-plugin-rewire):
Монтаж:
yarn add babel-core babel-plugin-rewire --dev
Добавить в.babelrc
"plugins": [
"rewire"
]
Вычислить пример зависимостей:
ApiClient.__Rewire__('settingsApi', {
paramConfig: 'config',
});
ApiClient.__Rewire__('HttpClient', class HttpClient {
constructor(config) {
}
});
ApiClient.__Rewire__('resources', {
resourceOne: class {
constructor(httpClient) {
}
});
Теперь вместо вызова зависимостей вызывается вышеуказанные функции.
sinon.stub(ApiClient.prototype, 'contructor');
имеет орфографическую ошибку. Должен бытьconstructor