2017-11-07 13 views
0

APIから受け取った応答に応じて、自分のアプリケーションの動作をチェックするテストを作成しようとしています。これを行うには、私が必要とする設定を持っている要求に応答しようとしています。テストでのリモートHTTP応答の模擬

私のアプリがログイン後にホームページにリダイレクトされることを確認する例です。応答がHTTP 200で、APIキーの値が必要です。私は

は、現在、私がいない成功を収めて、次のライブラリを試してみました

  • moxiosた要求をするためにaxiosを使用しています

  • axios-モックアダプタ
  • 矢筈

誰かがリモートHTTPリクエストを嘲笑して経験を持っていますか?相続人の反応?

EDIT:それは助けている場合、私はテスト

it('Does stuff', function() { 
    moxios.stubRequest('/auth/get_api_key', { 
    status: 200, 
    responseText: 'hello' 
    }) 
    return this.app.client.setValue('[name="username"]', 'testing').then(() => { 
    return this.app.client.setValue('[name="password"]', 'testing').then(() => { 
     return this.app.client.submitForm('#login-form').then(() => { 
     return this.app.client.getRenderProcessLogs().then(function (logs) { 
      console.log(logs) 
     }) 
     }) 
    }) 
    }) 
}) 

ためモカとチャイを使用しています上記のコードは、私は、要求が通過し、それがこの

を出力かどうかを確認するために使用しているものです

[{レベル: 'SEVERE' メッセージ: 'http://127.0.0.1:8000/auth/get_api_key/が - リソースのロードに失敗しました:正味:: ERR_CONNECTION_REFUSED' 源: 'ネットワーク' タイムスタンプ:1510082077495}]

答えて

0

私の例は、ほとんどmoxios docsから取られました。

まず、必要なライブラリをインポートします。その後、beforeEachフックとafterEachフックでモック・アシオ・サーバーの作成と破棄を処理します。次に、あなたが偵察したいと思う斧の要求にsinon.spy()を渡します。

この取得要求はモクシオスによって嘲笑され、moxios.wait(() => { moxios.request.mostRecent(); });からアクセスできますwait()メソッドの中では、最新のリクエストで必要な応答を設定できます。

その後、アキシャスを使用する場合と同じように、then()関数を使用して応答を取得します。 then()の中で、その特定の応答のテストを作成することができます。スペックを完了したら、done();に電話してリクエストを閉じ、スペックを移動してください。

import axios from 'axios'; 
import moxios from 'moxios'; 
import sinon from 'sinon'; 
import { equal } from 'assert'; //use the testing framework of your choice 

beforeEach(() => { 
    moxios.install(); 
}); 

afterEach(() => { 
    moxios.uninstall(); 
}); 

it('Does stuff', (done) => { 
    moxios.withMock(() => { 
    let onFulfilled = sinon.spy(); 
    axios.get('/auth/get_api_key').then(onFulfilled); 
    moxios.wait(() => { 
     let request = moxios.requests.mostRecent(); 
     request.respondWith({ 
     status: 200, 
     response: { 
      apiKey: 1234567890 
     } 
     }).then((res) => { 
     equal(onFulfilled.called, true); 
     equal(res.status, 200); 
     equal(res.response.apiKey, 1234567890); 
     done(); 
     }) 
    }) 
    }) 
}); 
+0

非常に詳細な回答ありがとうございます。注意すべき点の1つは、例を動作させるためには 'equal(res.data.apiKey、1234567890);'を実行しなければならないということです。 さらに、これは残念なことに私のケースに合わないようです。私は、アプリケーションで使用されているAxiosインスタンスにアクセスできない。私は、APIが正しい値を返すかどうかをテストしていない、私は、アプリケーションがAPIから正しい値を設定することをテストしたい。 言い換えれば、私はアプリでリクエストを作成しており、テストで手動で行うことはできません。私は、アプリケーションがapiKey値を正しく設定するように要求に応答したいと思っています。それは理にかなっていますか? –

+0

もう少し調べてみると、デフォルトで他のリクエストを模擬しているようです。彼らのドキュメントで実証されているように。しかし何らかの理由で、moxios.requests.mostRecent()が未定義の結果を返す –

+0

Axiosのインスタンスを呼び出して、テストエンドポイントを仕様にしていますか?私はこの行をここでは 'axios.get( '/ auth/get_api_key')、then(onFulfilled);'も除外する価値があるでしょうか、すべての依存関係がインストールされていますか(sinon、axios、moxios)? – Ajikan

関連する問題