web-dev-qa-db-ja.com

Jestでデフォルトのエクスポートされた関数をスパイする方法は?

デフォルトの関数をエクスポートする単純なファイルがあるとします。

// UniqueIdGenerator.js
const uniqueIdGenerator = () => Math.random().toString(36).substring(2, 8);

export default uniqueIdGenerator;

私はこれを次のように使用します:

import uniqueIdGenerator from './UniqueIdGenerator';
// ...
uniqueIdGenerator();

私のテストでは、元の機能を維持しながらこのメソッドが呼び出されたことを主張したいと思います。 jest.spyOnただし、オブジェクトと関数名をパラメーターとして必要とします。どうすればこれをきれいに行うことができますか? jasmineにも同様の GitHubの問題 があります。

18
thisismydesign

私はデフォルトのエクスポートを破棄しました:

// UniqueIdGenerator.js
export const uniqueIdGenerator = () => Math.random().toString(36).substring(2, 8);

そして、私はそれを次のように使用してスパイすることができます:

import * as UniqueIdGenerator from './UniqueIdGenerator';
// ...
const spy = jest.spyOn(UniqueIdGenerator, 'uniqueIdGenerator');

一部推奨 それらをconstオブジェクトにラップしてエクスポートします。ラップ用のクラスも使用できると思います。

ただし、クラスを変更できない場合でも、(それほどナイスではない)解決策があります。

import * as UniqueIdGenerator from './UniqueIdGenerator';
// ...
const spy = jest.spyOn(UniqueIdGenerator, 'default');
25
thisismydesign