无法更改Jest模拟功能的行为

时间:2019-03-28 23:31:07

标签: typescript react-native redux jestjs enzyme

我遇到的问题是这样的:

1。)安装程序在beforeEach中

2。)尝试在个别测试中更改一些模拟行为,使其更具唯一性

3。)我无法更改在#1中设置的值

这是部分伪代码,因此语法可能已关闭,因为我没有前面的源码:

import Module from '../module';

...

jest.mock('../module');

describe('test suite', {

let mockFn = undefined;

beforeEach(() => {
   mockFn = jest.fn(() => 'banana');
   Module.function = mockFn;
});

test('happy test', () => {
   // this test needs Module.function to return 'banana', so it doesn't 
   // have any issues, as calls to Module.function return 'banana'
});

test('test with issue', () => {
   let mockFn2 = jest.fn(() => 'new value to return instead of banana');

   Module.function = mockFn2;

   //execute code
   //calls to Module.function still return 'banana'
});
}


我已经尝试了一些事情,例如添加了一个调用嘲笑fn.mockClear()的afterEach函数。我无法覆盖原始的模拟功能。对于我的大多数测试,原始的模拟都很好,因为我想要一个默认值,但是我的一些测试中,我需要确保当这些函数返回某些值时,代码以某种方式做出反应,但是我不能从我分配的任何内容中进行更改作为第一个模拟功能。

编辑-使用方法如下:

function() {
...

  if(Module.function().includes('somevalue'){
     //Do something
  }
  else {
     fetch(Module.function() + other stuff... )
     ...
}

};

这是它的定义方式:

export default class Module {

   public static function() {
      ...
   }
}

谢谢。

1 个答案:

答案 0 :(得分:0)

我终于明白了。这不是一个非常有趣的解决方案。我只是意识到,在调用被测函数之后,我已经投入了所有逻辑来更改模拟程序。哎呀我想我花了两个小时尝试不同的方式来重置模拟,而没有意识到...