[解決済み] 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を使用したMapBoxのCSSが欠落している件
-
[解決済み】Warning.Itが表示されるのはなぜですか?Functions are not valid as a React child?
-
[解決済み】React Propsが定義されていません。
-
[解決済み] react - createMuiThemeとcreateThemeの違い。
-
[解決済み] ReactJS: Warning: setState(...): 既存の状態遷移の間に更新することはできません
-
[解決済み] React-Router 4 キャッチオールルート
-
[解決済み] axios-mock-adapter onGet mock data not effective.
-
[解決済み] Error: yarn start - エラー コマンド "start" が見つかりません。
-
[解決済み] Cross-envでyarnの実行時にenv変数が変更されない。
-
[解決済み] componentDidUpdate'メソッドはいつ使用するのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラー: 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み] バベルエラーです。JSX値は、式または引用されたJSXテキストのいずれかである必要があります。
-
[解決済み] ReactJS: Warning: setState(...): 既存の状態遷移の間に更新することはできません
-
[解決済み] react router dom v4でwebpack dev serverを構成する方法は?
-
[解決済み] react nativeで関数だらけのヘルパーファイルを作成する方法は?
-
[解決済み] react jsでウィンドウを開くイベントを処理するにはどうすればよいですか?
-
[解決済み] reactstrapのドロップダウンで選択されたアイテムを設定する方法は?
-
[解決済み] React - 予想外のトークン、予想外の;
-
[解決済み] ReactJs "インバリアント違反..." リアクトの古典的な問題
-
[解決済み] React JSXのforEach()でHTMLが出力されない