この記事の内容は、Jest とは何ですか? Jest 関連の知識の紹介は、必要な友人に参考にしていただけると幸いです。
1 Jest とは何ですか?
Jest
Jest は、アサーション、JSDom、これは、開発者が必要とするカバレッジ レポートやその他のテスト ツールを備えた、ほぼ構成が不要なテスト フレームワークです。また、Facebook のオープンソース フロントエンド フレームワークである React のテストにも非常に適しています。
2 Jest のインストール
2.1 package.json の初期化
シェルに次のコマンドを入力して、フロントエンド プロジェクトを初期化し、パッケージを生成します。 json:
npm init -y
2.2 Jest と関連する依存関係をインストールする
シェルに次のコマンドを入力して、テストに必要な依存関係をインストールします:
npm install -D jest babel-jest babel-core babel-preset-env regenerator-runtime
babel-jest、babel-core 、regenerator-runtime、babel-preset-env のこれらの依存関係は、ES6 の構文機能を単体テストに使用できるようにするためのものです。モジュールをインポートするために ES6 によって提供されるインポート メソッドは、Jest 自体ではサポートされていません。
2.3 .babelrc ファイルを追加します
プロジェクトのルート ディレクトリに .babelrc ファイルを追加し、ファイル内の次の内容をコピーします。
{ "presets": ["env"] }
2.4 package.json スクリプトでのテスト
package.json ファイルを開き、スクリプトの下の test の値を jest:
"scripts": { "test": "jest" }
3 に変更します。最初の Jest テストを作成します。 ##src ディレクトリと test ディレクトリおよび関連ファイルを作成します
プロジェクトのルート ディレクトリに src ディレクトリを作成し、src ディレクトリに function.js ファイルを追加します
テストを作成しますプロジェクトのルート ディレクトリにディレクトリを作成し、テスト ディレクトリに function.test.js ファイルを作成します。
Jest は、プロジェクト内の .spec.js または .test.js ファイルを使用して名前が付けられたすべてのテスト ファイルを自動的に検索し、実行します。通常、テスト ファイルを作成します。従うべき命名規則は次のとおりです: テスト ファイルのファイル名 = テスト対象のモジュールの名前。たとえば、テスト対象のモジュールは function.js です。対応するテスト ファイルの名前は、functions.test.js です。
src/functions.js にテスト済みモジュールを作成します
export default { sum(a, b) { return a + b; } }
test/functions.test.js ファイルにテスト ケースを作成します
import functions from '../src/functions'; test('sum(2 + 2) 等于 4', () => { expect(functions.sum(2, 2)).toBe(4); })
npm run test を実行します (Jest)次のメッセージがシェルに出力されます:
PASS test/functions.test.js √ sum(2 + 2) 等于 4 (7ms) Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 total Time: 4.8s
expect(functions.sum(2, 2)).toBe( 4) はアサーションです。Jest は、テストされたメソッドをラップしてオブジェクトを返すための関数を提供します。このオブジェクトには、アサーションを簡単に行うための一連のマッチャーが含まれています。複数のマッチャーが関与する、一般的に使用される Jest アサーションをいくつか紹介します。
.not
//functions.test.js import functions from '../src/functions' test('sum(2, 2) 不等于 5', () => { expect(functions.sum(2, 2)).not.toBe(5); })
.not 修飾子を使用すると、結果が特定の値と等しくない場合の状況をテストできます。これは英語の構文とほぼ同じであり、理解しやすいです。 。
.toEqual()
// functions.js export default { getAuthor() { return { name: 'LITANGHUI', age: 24, } } }
// functions.test.js import functions from '../src/functions'; test('getAuthor()返回的对象深度相等', () => { expect(functions.getAuthor()).toEqual(functions.getAuthor()); }) test('getAuthor()返回的对象内存地址不同', () => { expect(functions.getAuthor()).not.toBe(functions.getAuthor()); })
.toEqual マッチャーはオブジェクトのすべての属性と属性値が等しいかどうかを再帰的にチェックしますので、アプリケーションの種類を比較したい場合は .toEqual を使用してください。 .toBe の代わりにマッチャーを使用します。
.toHaveLength
// functions.js export default { getIntArray(num) { if (!Number.isInteger(num)) { throw Error('"getIntArray"只接受整数类型的参数'); } let result = []; for (let i = 0, len = num; i < len; i++) { result.push(i); } return result; } }
// functions.test.js import functions from '../src/functions'; test('getIntArray(3)返回的数组长度应该为3', () => { expect(functions.getIntArray(3)).toHaveLength(3); })
.toHaveLength は、文字列型と配列型の長さが期待どおりかどうかをテストするのに便利です。
.toThrow
// functions.test.js import functions from '../src/functions'; test('getIntArray(3.3)应该抛出错误', () => { function getIntArrayWrapFn() { functions.getIntArray(3.3); } expect(getIntArrayWrapFn).toThrow('"getIntArray"只接受整数类型的参数'); })
.toThorw を使用すると、テスト対象のメソッドが期待どおりに例外をスローするかどうかをテストできますが、これを使用するときに注意する必要があるのは、次のような関数を使用する必要があるということです。上記の getIntArrayWrapFn と同様に、関数のラッパーを作成します。そうしないと、関数がスローされるため、アサーションは失敗します。
.toMatch
// functions.test.js import functions from '../src/functions'; test('getAuthor().name应该包含"li"这个姓氏', () => { expect(functions.getAuthor().name).toMatch(/li/i); })
.toMatch は正規表現を渡します。これにより、文字列型の正規一致を実行できます。
5 非同期関数のテストaxios のインストール
ここでは、リクエスト処理に最も一般的に使用される http リクエスト ライブラリ axios を使用しますnpm install axios
http://jsonplaceholder.typicode.com/users/1,
これは、JSONPlaceholder によって提供される模擬リクエスト アドレスです
JSONPlaceholder
// functions.js import axios from 'axios'; export default { fetchUser() { return axios.get('http://jsonplaceholder.typicode.com/users/1') .then(res => res.data) .catch(error => console.log(error)); } }
// functions.test.js import functions from '../src/functions'; test('fetchUser() 可以请求到一个含有name属性值为Leanne Graham的对象', () => { expect.assertions(1); return functions.fetchUser() .then(data => { expect(data.name).toBe('Leanne Graham'); }); })
上記では、expect.assertions(1) を呼び出しました。これにより、非同期テスト ケースでアサーションがコールバック関数で実行されることが保証されます。これは、非同期コードをテストする場合に非常に効果的です。
async と await を使用して非同期コードを合理化する
test('fetchUser() 可以请求到一个用户名字为Leanne Graham', async () => { expect.assertions(1); const data = await functions.fetchUser(); expect(data.name).toBe('Leanne Graham') })
もちろん、Babel をインストールしたので、非同期テスト コードを合理化するために async と await の構文を使用しないのはなぜでしょうか。すべてexpect.assertionsメソッドを呼び出す必要があることを忘れてください。
以上がジェストとは何ですか? Jestの基本的な使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。