UPDATE: Ich habe diesen und andere Ansätze in https://github.com/magicmark/jest-how-do-i-mock-x/blob/master/src/function-in-same-module/README zusammengefasst. md
Was ist der beste Weg, um das folgende Beispiel richtig zu verspotten?
Das Problem ist, dass nach dem Import foo
der Verweis auf das Original nicht verspottet bleibt bar
.
module.js:
export function bar () {
return 'bar';
}
export function foo () {
return `I am foo. bar is ${bar()}`;
}
module.test.js:
import * as module from '../src/module';
describe('module', () => {
let barSpy;
beforeEach(() => {
barSpy = jest.spyOn(
module,
'bar'
).mockImplementation(jest.fn());
});
afterEach(() => {
barSpy.mockRestore();
});
it('foo', () => {
console.log(jest.isMockFunction(module.bar)); // outputs true
module.bar.mockReturnValue('fake bar');
console.log(module.bar()); // outputs 'fake bar';
expect(module.foo()).toEqual('I am foo. bar is fake bar');
/**
* does not work! we get the following:
*
* Expected value to equal:
* "I am foo. bar is fake bar"
* Received:
* "I am foo. bar is bar"
*/
});
});
Vielen Dank!
EDIT: Ich könnte ändern:
export function foo () {
return `I am foo. bar is ${bar()}`;
}
zu
export function foo () {
return `I am foo. bar is ${exports.bar()}`;
}
aber das ist p. hässlich meiner Meinung nach überall zu tun: /
UPDATE: Ich habe diesen und andere Ansätze in https://github.com/magicmark/jest-how-do-i-mock-x/blob/master/src/function-in-same-module/README zusammengefasst. md
jest
GH-Seite github.com/facebook/jest/issues/936#issuecomment-545080082