正しく次の例を模擬するための最良の方法は何ですか?冗談
問題は、インポート後に、foo
が元のロック解除された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"
*/
});
});
ありがとう!
EDIT:
export function foo() {
return `I am foo. bar is ${exports.bar()}`;
}
に
export function foo() {
return `I am foo. bar is ${bar()}`;
}
をしかし、これは、pです:私は変更することができます。どこにでも行うには私の意見では醜い:/
あなたが許可されているので、私は、一般的に依存性注入のファンではありませんコードの書き方を変更するためのテスト。それは言われている、これは現在のより高い投票率の答えよりも醜いです – Sean