我在javascript(反应)项目中进行单元测试时遇到问题。 想要测试ApiClient类。为此,我将必须隔离settingsApi,HttpClient和资源。 我使用的工具:摩卡咖啡,柴,西农
我也尝试使用rewire,但不能。我已经读过这可能是因为通天塔。
我尝试过这样的存根:
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;
答案 0 :(得分:0)
我已经可以解决我的问题,我使用了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) {
}
});
现在,无需调用依赖项,而是调用上述函数。