これは不可能だと思い始めていますが、とにかく聞きたいです。
ES6モジュールの1つが特定の方法で別のES6モジュールを呼び出すことをテストしたいと思います。ジャスミンを使えば、これはとても簡単です-
アプリコード:
// myModule.js
import dependency from './dependency';
export default (x) => {
dependency.doSomething(x * 2);
}
そしてテストコード:
//myModule-test.js
import myModule from '../myModule';
import dependency from '../dependency';
describe('myModule', () => {
it('calls the dependency with double the input', () => {
spyOn(dependency, 'doSomething');
myModule(2);
expect(dependency.doSomething).toHaveBeenCalledWith(4);
});
});
Jestと同等のものは何ですか?これはやりたいことのように簡単なことだと思いますが、それを理解しようとして髪を切り裂いてきました。
一番近いのは、import
sをrequire
sに置き換え、それらをテスト/関数内に移動することです。どちらも私がやりたいことではありません。
// myModule.js
export default (x) => {
const dependency = require('./dependency'); // yuck
dependency.doSomething(x * 2);
}
//myModule-test.js
describe('myModule', () => {
it('calls the dependency with double the input', () => {
jest.mock('../dependency');
myModule(2);
const dependency = require('../dependency'); // also yuck
expect(dependency.doSomething).toBeCalledWith(4);
});
});
ボーナスポイントとして、内部の関数dependency.js
がデフォルトのエクスポートである場合は、すべてを機能させたいと思います。ただし、私はデフォルトのエクスポートをスパイすることはJasmineでは機能しないことを知っています(または、少なくともそれを機能させることはできませんでした)。
import
sをrequire
s にトランスパイルし続けてもかまいません。頭を上げてくれてありがとう。