unit testing Jest: एक परीक्षण सूट के भीतर विभिन्न परीक्षणों के लिए मैनुअल नकली आउटपुट को बदलें



unit-testing mocking (0)

मान लीजिए मेरे पास निम्न दो फाइल हैं:

// index.js
...
import { IS_IOS } from 'common/constants/platform';
...
export const myFunction = () => (IS_IOS ? 'foo' : 'bar');


// index.test.js
...
import { myFunction } from './index';

jest.mock('common/constants/platform', () => ({ IS_IOS: true }));

describe('My test', () => {
  it('tests behavior on IOS', () => {
    expect(myFunction()).toBe('foo');
  });

  // --> Here I want to change the value of IS_IOS to false

  it('tests behavior if NOT IOS', () => {
    expect(myFunction()).toBe('bar');
  });
});

जैसा कि आप देखते हैं कि मेरा मजाकिया समारोह IS_IOS: true रिटर्न देता है IS_IOS: true । मैं इसे IS_IOS: false वापस करना चाहता IS_IOS: false मेरी पहली परीक्षा के बाद IS_IOS: false । मुझे यह कैसे करना है?

मैंने यहां समाधान का एक अनुकूलन भी करने की कोशिश की , लेकिन मैं इसे काम नहीं कर सका क्योंकि वहाँ नकली फ़ंक्शन लौटाता है:

module.exports = {
    foo: jest.genMockFunction();
}

जबकि मेरी नकली को एक बूलियन मान वापस करना चाहिए जो कि फ़ाइल के अंदर नहीं बुलाया जाता है, मैं परीक्षण कर रहा हूं। यही मैंने यहाँ किया है:

// common/constants/__mock__/platform
export const setIsIos = jest.fn(val => (IS_IOS = val));
export let IS_IOS;

// index.test.js
...
import { IS_IOS, setIsIos } from 'common/constants/platform';
jest.mock('common/constants/platform');

describe('My test', () => {
  setIsIos('foo');

  it('tests behavior on IOS', () => {
    expect(myFunction()).toBe('foo');
  });

  setIsIos('bar');

  it('tests behavior if NOT IOS', () => {
    expect(myFunction()).toBe('bar');
  });
});

अजीब तरह से जब सांत्वना-लॉगिंग, यानी console.log(IS_IOS); मुझे आशा है कि मूल्य मिलेंगे हालांकि परीक्षण मूल मूल्य का उपयोग करने लगता है, अर्थात् undefined





jestjs