1

私は次のようなコントローラーメソッドを持っています:

class TestController < ApplicationController
  def testAction
    render :json => { 'success'=>1 }.to_json
  end
end

このアクションをブラウザーにロードすると、期待どおりの結果が得られます。{"success":1}

ただし、RSpecでテストするとresponse.body'<html><body>You are being <a href="https://test.host/test/testAction">redirected</a>.</body></html>'

この奇妙なリダイレクトがすべてのコントローラーで発生していることに気づきました。このリダイレクトの発生を停止して、応答本文のチェックを実行するにはどうすればよいですか?

ありがとう!

- - - - - - - - - - - - 編集:

次のテストの失敗が発生している理由はありますか?

# app/controllers/test_controller.rb
def test
  flash[:notice] = 'test'
end

# spec/controllers/test_controller_spec.rb
describe TestController, "calling the test() method" do
  it "should set the flash notice" do
    put :test
    flash[:notice].should_not be_blank
  end
end

# result
'TestController calling the test() method should set the flash notice' FAILED
expected blank? to return false, got true
4

3 に答える 3

0

あなたの例がTestControllerのように見えるのに、なぜあなたのテスト出力が「ApiControllerがtest()メソッドを呼び出している...」と言うのか混乱しています。私は自分の例をいくつか実行しましたが、正しい結果が得られたようです。これを診断するには、Rubyデバッガー(gem ruby​​-debug)を試すことをお勧めします。これにより、適切なコードが呼び出されていることを確認したり、値をインタラクティブにチェックしたりできます。

于 2010-01-27T14:32:51.387 に答える
0

アサーションを次のように変更します

response.should be_redirect

少なくとも、それが正しいことをしているなら:)

于 2011-09-15T18:13:09.963 に答える
-1

定義上、コントローラーで単体テストを実行しているため、応答の内容を確認しようとしてはならず、正しいアクションが発生し、想定されていたすべてのことを実行しただけです。応答の内容をテストすることは、Cucumberのような統合テストの仕事です。

基本的に、コントローラーがリダイレクトを試みたことを表明してみてください。

@response.should be_redirect
于 2010-01-26T10:33:31.507 に答える