unit-testing - react - jest testing service



Jest: Ändere die Ausgabe des manuellen Mocks für verschiedene Tests innerhalb einer Testsuite (0)

Sagen wir, ich habe die folgenden zwei Dateien:

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

Wie Sie sehen, gibt meine spöttische Funktion IS_IOS: true . Ich möchte, dass es nach meinem ersten Test IS_IOS: false . Wie würde ich das tun?

Ich habe auch hier eine Anpassung der Lösung versucht , aber ich konnte es nicht funktionieren, weil dort der Mock eine Funktion zurückgibt:

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

wohingegen mein Mock einen booleschen Wert zurückgeben sollte, der in der Datei, die ich gerade testet, nicht aufgerufen wird. Das habe ich hier gemacht:

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

Seltsamerweise beim Konsolenloggen, console.log(IS_IOS); Ich bekomme die erwarteten Werte. Der Test scheint jedoch den ursprünglichen Wert zu verwenden, dh undefined .





jestjs