[解決済み] jest.fn()の機能と使い方を教えてください。
2022-03-02 17:59:59
質問
を説明できる人はいますか?
jest.fn()
実際にどのように使うのか、どこで使わなければならないのか、混乱しているので、実際の例を挙げて説明します。
例えば、Countriesというコンポーネントがあり、ボタンをクリックするとUtils Functionの助けを借りて国のリストを取得するとします。
export default class Countries extends React.Component {
constructor(props) {
super(props)
this.state = {
countryList:''
}
}
getList() {
//e.preventDefault();
//do an api call here
let list = getCountryList();
list.then((response)=>{ this.setState({ countryList:response }) });
}
render() {
var cListing = "Click button to load Countries List";
if(this.state.countryList) {
let cList = JSON.parse(this.state.countryList);
cListing = cList.RestResponse.result.map((item)=> { return(<li key={item.alpha3_code}> {item.name} </li>); });
}
return (
<div>
<button onClick={()=>this.getList()} className="buttonStyle"> Show Countries List </button>
<ul>
{cListing}
</ul>
</div>
);
}
}
使用したユーティリティ関数
const http = require('http');
export function getCountryList() {
return new Promise(resolve => {
let url = "/country/get/all";
http.get({host:'services.groupkt.com',path: url,withCredentials:false}, response => {
let data = '';
response.on('data', _data => data += _data);
response.on('end', () => resolve(data));
});
});
}
を使用することができます。
Jest.fn()
をテストするにはどうすればよいですか?
getList
関数が呼び出されるのでしょうか?
どのように解決するのですか?
モック関数は別名「スパイ」とも呼ばれ、単に出力をテストするだけでなく、他のコードから間接的に呼び出される関数の挙動をスパイすることができるからです。モック関数を作成するには
jest.fn()
.
新しい、未使用のモック関数を返します。オプションでモックの実装を受け取ります。
const mockFn = jest.fn();
mockFn();
expect(mockFn).toHaveBeenCalled();
モック実装で
const returnsTrue = jest.fn(() => true);
console.log(returnsTrue()) // true;
だから、モックを作ることができる
getList
を使って
jest.fn()
を以下のように設定します。
jest.dontMock('./Countries.jsx');
const React = require('react/addons');
const TestUtils = React.addons.TestUtils;
const Countries = require('./Countries.jsx');
describe('Component', function() {
it('must call getList on button click', function() {
var renderedNode = TestUtils.renderIntoDocument(<Countries />);
renderedNode.prototype.getList = jest.fn()
var button = TestUtils.findRenderedDOMComponentWithTag(renderedNode, 'button');
TestUtils.Simulate.click(button);
expect(renderedNode.prototype.getList).toBeCalled();
});
});
関連
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] 例外がスローされたことを確認するためにAssertを使用するにはどうすればよいですか?
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み] Reactのstateとpropsの違いとは?
-
[解決済み] モッキングとは?
-
[解決済み] 明示的なプロミス構築のアンチパターンとそれを回避する方法とは?
-
[解決済み] Jestの'it'と'test'の違いは何ですか?
-
[解決済み] いつモックすればいい?
-
[解決済み] 既存のプロダクションプロジェクトにユニットテストをうまく追加することができますか?もしそうなら、どのように、そして、それは価値があるのでしょうか?
-
[解決済み】ユニットテストについて語るときの「DAMP not DRY」の意味とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Assert.Fail()はバッドプラクティスとみなされるか?
-
[解決済み] tornado + async defのunittestはどのように行うのですか?
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み] ユニットテストの命名のベストプラクティス [終了しました]。
-
[解決済み] モッキングとは?
-
[解決済み] クロームの拡張機能をテストするには?
-
[解決済み] いつモックすればいい?
-
[解決済み] ファイルシステムに依存するコードの単体テスト
-
[解決済み] Junit: 統合テストと単体テストの分割
-
[解決済み] Enzyme - How to access and set <input> value?