Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 笑话中的嘲弄方法_Unit Testing_Reactjs_Flux_Jestjs - Fatal编程技术网

Unit testing 笑话中的嘲弄方法

Unit testing 笑话中的嘲弄方法,unit-testing,reactjs,flux,jestjs,Unit Testing,Reactjs,Flux,Jestjs,我有一个非常简单的单元测试,如下所示: import ApiWrapper from '../../services/api_wrapper'; jest.unmock('../helper') describe('Helper', () => { let Helper; beforeEach(() => { Helper = require('../helper').default; }); it('calls the Api

我有一个非常简单的单元测试,如下所示:

import ApiWrapper from '../../services/api_wrapper';
jest.unmock('../helper')

describe('Helper', () => {
    let Helper;

    beforeEach(() => {
        Helper = require('../helper').default;
    });

    it('calls the Api Wrapper', () => {
        Helper.help()

        expect(ApiWrapper.help).toHaveBeenCalled();
    });

});
import ApiWrapper from '../services/api_wrapper'
class Helper {
    help() {
        ApiWrapper.help()
    }
}

export default new Helper();
class ApiWrapper {
  static help () {
     console.log('help!')
  }
}
export default ApiWrapper;
其中,帮助程序如下所示:

import ApiWrapper from '../../services/api_wrapper';
jest.unmock('../helper')

describe('Helper', () => {
    let Helper;

    beforeEach(() => {
        Helper = require('../helper').default;
    });

    it('calls the Api Wrapper', () => {
        Helper.help()

        expect(ApiWrapper.help).toHaveBeenCalled();
    });

});
import ApiWrapper from '../services/api_wrapper'
class Helper {
    help() {
        ApiWrapper.help()
    }
}

export default new Helper();
class ApiWrapper {
  static help () {
     console.log('help!')
  }
}
export default ApiWrapper;
ApiWrapper看起来像这样:

import ApiWrapper from '../../services/api_wrapper';
jest.unmock('../helper')

describe('Helper', () => {
    let Helper;

    beforeEach(() => {
        Helper = require('../helper').default;
    });

    it('calls the Api Wrapper', () => {
        Helper.help()

        expect(ApiWrapper.help).toHaveBeenCalled();
    });

});
import ApiWrapper from '../services/api_wrapper'
class Helper {
    help() {
        ApiWrapper.help()
    }
}

export default new Helper();
class ApiWrapper {
  static help () {
     console.log('help!')
  }
}
export default ApiWrapper;
ApiWrapper.help()被嘲笑为“救命!”从未打印,但测试中的预期失败。如果我们将ApiWrapper重写为一个普通Javascript对象,则仍然会失败,如下所示:

export default {
    help: () => { console.log('help!'); }
}
但是,如果我们在规范中更改导入(因此ApiWrapper在beforeach中导入),并将ApiWrapper重写为一个单例类,则它是有效的,如下所示:

class ApiWrapper {
   help() {
      console.log('help!');
   }
}();

export default new ApiWrapper();

Jest的模仿行为是什么导致了这种情况发生的?

如果移动
require('../helper').default在beforeach()之前的
之外。


您不需要在每次测试之前初始化它。但是,我会将
ApiWrapper.help.mockClear()
放在
beforeach()
中以重置模拟调用。

如果移动
require('../helper')。默认值在beforeach()之前的
之外。


您不需要在每次测试之前初始化它。但是,我会将
ApiWrapper.help.mockClear()
放在
beforeach()
中以重置模拟调用。

此问题所在线程中的更多信息:此问题所在线程中的更多信息: