0

ここでTDD Reactについて学んでいますが、以下のテスト状況を理解していません:

it('Correctly updates the state after AJAX call in `componentDidMount` was made', (done) => {
  nock('https://api.github.com')
    .get('/users')
    .reply(200, [
      { 'name': 'Reign', 'age': 26 }
    ]);
  // Overwrite, so we can correctly reason about the count number
  // Don't want shared state
  wrapper = mount(<UsersListComponent />);
  setTimeout(function() {
    expect(wrapper.state().usersList).to.be.instanceof(Array);
    expect(wrapper.state().usersList.length).to.equal(1);
    expect(wrapper.state().usersList[0].name).to.equal('Reign');
    expect(wrapper.state().usersList[0].age).to.equal(26);
    nock.cleanAll();
    done();
  }, 1500);
});

nockリクエストを偽造するために使用する目的は何ですか? このリクエストは何も実行せず、レスポンスがどこに送られるかわかりません。TDD のアプローチは、テスト (ラッパーで始まるコード) を作成し、それが失敗することを確認してから、実際のコンポーネントで実際の ajax 呼び出しを使用してテストすることだと思いました。ここでノックが何をするのかわかりません。

4

2 に答える 2

3

コード内の呼び出しの目的はnock、API 要求を偽装することです。ノックは呼び出しをキャプチャ/傍受し、実際の応答の代わりに偽の情報を含む応答を返します。

テストのタイトルはCorrectly updates the state after AJAX call...、実際の API 要求が正常に実行されたかどうかではなく、状態が正しく更新されたかどうかをテストすることを意図しているためです。

これにより、たとえば、さまざまなデータセットを受信したときのアプリの動作など、さまざまなシナリオをモデル化してテストできます。また、実際の API がまだ準備できていない場合でも、テストを完了することができます。

于 2016-10-05T08:15:29.463 に答える
1

単体テストの目的は、可能な限り最も分離された方法でコードをテストすることだけです。AJAX リクエストを偽造してその応答を取得することは、エンドポイントの問題を回避するための非常に一般的な方法であり (これはとにかくテストしているものではないため)、このエンドポイントの応答を処理するコードに焦点を当てています。応答のさまざまなモデルを選択できます。さまざまなシナリオをテストします。

「 https://api.github.com/users」への呼び出しが行われると、Nock はコンポーネントに応答を返すだけです。

于 2016-10-05T08:16:00.633 に答える