2017-05-08 12 views
1

私はビューの構築方法をテストする統合テストを構築しています。このアプリケーションのアーキテクチャは、Rails APIと通信するAngularフロントエンドです。RSpecでCapybaraがあなたのアプリのAPIをスタブする方法をテストしますか?

サーバーから読み込まれたデータに応じて、Angularで機能の動作をテストします。したがって、私はそれが正しく戻ってきたことを保証できるように、そのデータをスタブしたいと思います。私はこれが技術的に統合テストではないことを知っていますが、それは私がテストしているフロントエンドです。

私は

describe "my front end feature" do 

    # This before block has the data I want to instruct my API to return 
    data = [ 
     {"uid"=>"1", "last_seen_at"=>"2017-05-08T09:24:38"}, 
     {"uid"=>"2", "last_seen_at"=>"2017-05-08T09:11:07"}, 
     {"uid"=>"3", "last_seen_at"=>"2017-05-08T08:49:57"} 
    ] 

    # NB this next line does not work... 
    WebMock.stub_request(:any, /\/my_api\/data_resource.*/).to_return(status: 200, 
                body: data.to_json) 
    end 

    it "Should load my stubbed data into the page" do 
    login member1 
    visit org_path(org) 
    # do my test to detect the appropriate content in the page 
    end 
end 

どのようにあなたがあなた自身のAPIをスタブすることができますを行うことができるようにしたいのですがどのような?

私は外部APIをスタブするためにwebmockを使用する方法を知っていますが、私がしたいのは、capybaraがfirefoxを起動したときにスタブされたデータを取得するのではなく、自分のAPIをスタブすることです。これは可能ですか?

答えて

1

あなたが言ったように、これは実際に機能テストで行うべきことではありません。通常、APIが実際に実行され、期待しているデータを返すように、フィクスチャまたはファクトリを使用して、テストでデータを設定します。

あなたの現在の計画を続けることを強くお勧めする場合は、puffing-billy-https://github.com/oesmith/puffing-billyのようなプログラマブルなプロキシが、(アプリケーションコードを変更せず、機能テストの考え方に最も近い)最良のソリューションです。 WebMockと似ていますが、アプリの内部ではなくブラウザからリクエストを受け取り、利用可能なCapybaraドライバにうまく統合するように設計されています。

関連する問題