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
.