2016-10-05 8 views
0

私はTDDについて学んだがhereを反応させ、下記のテストの状況を理解していない:テストで模擬ajax呼び出しを使用する目的は何ですか?

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呼び出しを使用してテストを参照してください。私はここでノックが何をするのか見ていない。

答えて

3

コードのnock呼び出しの目的は、APIリクエストを偽造することです。 Nockはコールをキャプチャ/インターセプトし、実際の応答の代わりに、偽の情報で応答を返します。

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

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

1

ユニットテストの目的は、あなたのコードをテストすることのみが可能な最も孤立した方法です。 AJAX要求を偽ってその応答を得ることは、エンドポイントの問題を回避するための非常に一般的な方法です(これはあなたがテストしているものではありません)。このエンドポイントの応答を処理するコードに焦点を当て、さまざまなシナリオをテストします。

Nockは、「https://api.github.com/users」への呼び出しが行われたときに応答を返すだけです

関連する問題