对javascript类进行单元测试(ES6)-存根不起作用

时间:2018-07-12 12:04:53

标签: javascript node.js unit-testing

我在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;

1 个答案:

答案 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) {       
       }
});

现在,无需调用依赖项,而是调用上述函数。