[解決済み] Jestの`beforeEach`グローバルは何のためにあるのですか?
質問
Jest-Enzymeのテストケースはいつも
beforeEach
というようなグローバルなものです。
describe('TEST BLOCK' () => {
let wrapper;
beforeEach(() => {
wrapper = shallow(<Component />);
));
));
の中の関数は
beforeEach
の中の各テストの前に実行されます。
TEST BLOCK
describe
ブロックを作成します。この場合、浅いレンダリングで
Component
に代入し
wrapper
を、各テストを実行する前に実行します。そもそも、なぜこのようなことをするのか、よくわかりません。テストの実行時間を意図的に遅くしているのではないのでしょうか?一度レンダリングして、それを
wrapper
? の目的は何ですか?
beforeEach
ここで?他のシナリオで
beforeEach
は、Reactコンポーネントをテストする際に有益なのでしょうか?
どのように解決するのですか?
複数のテストにまたがって共通するコードがある場合は
beforeEach
を使用して、各テストが実行される前に何らかの設定を行い、繰り返しを回避します。この場合、もし複数のテストで浅いマウントの
Component
に移動させることができます。
beforeEach
そして、すべてのテストが実行されるときにコンポーネントがマウントされます。一般に、これは
afterEach
を呼び出します。
wrapper.unmount()
.
describe('tests', () => {
it('does one thing', () => {
const wrapper = shallow(<Component />);
// ...test some things
wrapper.unmount();
});
it('does another thing', () => {
const wrapper = shallow(<Component />);
// ...test something else
wrapper.unmount();
});
it('does a third thing', () => {
const wrapper = shallow(<Component />);
// ...test a third thing
wrapper.unmount();
});
});
になります。
describe('tests', () => {
let wrapper;
beforeEach(() => {
wrapper = shallow(<Component />);
});
afterEach(() => {
wrapper.unmount();
});
it('does something', () => {
// ...test something
});
it('does something else', () => {
// ...test something else
});
it('does another thing', () => {
// ...test a third something
});
});
beforeEach
は「セットアップ」フェーズと呼ばれ
afterEach
を "teardown "フェーズと呼ぶ。
テストの実行時間を意図的に遅くしていないだろうか?
いいえ、いずれにせよ、各テストでコンポーネントを浅くマウントする必要があるためです。
一度レンダリングして、wrapperにアサインすればOKなのでは?
複数のテストにわたってコンポーネント (または任意の状態性) を持続させると、テストが不安定になる可能性があります。なぜなら (たとえば) テストを異なる順番で実行すると、異なる結果が得られるかもしれないからです。(マウントされたコンポーネントのような) いかなる状態も、各テストの前にセットアップし、 各テストの後に破棄しなければなりません。こうすることで、テストは互いに完全に独立したものになります。
関連
-
[解決済み】Reactでclsxを使用する方法
-
[解決済み] バベルエラーです。JSX値は、式または引用されたJSXテキストのいずれかである必要があります。
-
[解決済み] マテリアルUIセレクトフィールドのマルチセレクト
-
[解決済み] TypeError: reactjs の未定義のプロパティ 'status' を読み取ることができません。
-
[解決済み] formcontrollabel - material-ui | Reactのデフォルトのtypography classを変更するには?
-
[解決済み] Angular 2の*ngForのReactでの同等品
-
[解決済み] react nativeで関数だらけのヘルパーファイルを作成する方法は?
-
[解決済み] カスタマイズ素材UI チェックした場合としない場合の切り替え
-
[解決済み] axios-mock-adapter onGet mock data not effective.
-
[解決済み] プロップ `history` は `Router` で必須とマークされているが、その値は `undefined` である。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] reactでonloadを使うには?
-
[解決済み] sh: react-scripts: npm start の実行後にコマンドが見つからない。
-
[解決済み] ReactJsのCreateClassは関数ではない
-
[解決済み] リアクトです。<tr>は<td>の子として表示できません。コメント > td > tr を参照してください。
-
[解決済み] MUI Boxは何のためのコンポーネントですか?
-
[解決済み] React JS Jestで「SyntaxError: 予期しないトークン"
-
[解決済み] componentWillReceiveProps は名称が変更されました。
-
[解決済み] ReactJS - SCRIPT1010: 期待される識別子 - IE11 で本番ビルドが実行されない
-
[解決済み] React JSでは、状態を直接変異させない、setState() react/no-direct-mutation-stateを使用する。
-
[解決済み] react-router-domを使用する際に「Function components cannot be given refs」を回避する方法は?