Не удается изменить поведение Jest-макета функции

#typescript #react-native #redux #jestjs #enzyme

#typescript #react-native #сокращение #jestjs #фермент

Вопрос:

Ситуация, с которой у меня возникла проблема, заключается в следующем:

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'
});
}


  

Я пробовал некоторые вещи, такие как добавление функции afterEach, которая вызывает mockFn.mockClear(). Я не смог переопределить исходную фиктивную функцию. Для большинства моих тестов исходные макеты подходят, потому что мне нужно значение по умолчанию, но в нескольких моих тестах мне нужно убедиться, что код реагирует определенным образом, когда определенные значения возвращаются этими функциями, но я не могу изменить его с того, что я назначаю ему в качестве первой макетной функции.

Редактировать — Вот как это используется:

 function() {
...

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

};
  

Вот как это определяется:

 export default class Module {

   public static function() {
      ...
   }
}
  

Спасибо.

Комментарии:

1. Это зависит от того, как Module импортируется и используется в тестируемом коде, можете ли вы обновить вопрос с помощью тестируемого кода?

2. @brian-lives-outdoors нет, я не могу опубликовать исходный код. Я обновлю OP псевдокодом того, как он используется.

Ответ №1:

Я, наконец, понял это. Не очень интересное решение. Я только что понял, что применил всю логику для изменения макетов … после вызова тестируемой функции. Упс. Я думаю, что потратил два часа, пробуя разные способы сброса макетов, не осознавая этого…