0

Rails アプリケーションで「create」の機能テストを作成するために、「factory_girl」で「shoulda」を使用しようとすると問題が発生します。シンプルなプロジェクトを作成し、ユーザーをスキャフォールディングし、「shoulda」(私のシステムの現在の gem バージョン 2.11.3 ) と「factory_girl」を test_helper.rb に追加しました。ユーザーを手動で作成するとうまくいきます。失敗を再現する手順は次のとおりです。

  1. レールプロジェクト
  2. scaffold ユーザー名:文字列
  3. test_helper.rb に追加:

      require 'shoulda'  
      require 'factory_girl'
    
  4. rake db:移行

  5. ユーザー用に次の機能テストを作成します ( users_controller_test.rb をオーバーライドします) :

    class UsersControllerTest < ActionController::TestCase
     Factory.define(:user) do |u|
      u.name 'joe'
     end
     context "should create user" do
      context "with valid data" do
       setup do
         User.any_instance.expects(:save).returns(true).once
         User.any_instance.stubs(:id).returns(1001)
         post :create, :user => {}
       end
       should_assign_to :user, :class => User
       should_set_the_flash_to "User was successfully created."
       should_redirect_to("user page"){user_path(1001)}
      end
     end
    end
    
  6. 「rake test:functionals」でテストを実行すると、失敗が表示されます:

応答は へのリダイレクトであると予想されて<http://test.host/users/1001>いましたが、 へのリダイレクトでした<http://test.host/users>

「should_redirect_to」が非推奨になっているのを見たので、「should_redirect_to」でもプレイしましたが、運がありませんでした。あなたはなにか考えはありますか ?

前もって感謝します、

マリアン・ヴァシル・カライマン。

4

1 に答える 1

0

スタブの代わりに、特定のユーザー モック オブジェクトUser#idをスタブして使用します。User.create

setup do
  mock_user = Factory.stub(:user, :id => 1001)
  User.expects(:create).returns(mock_user)
  mock_user.expects(:save).returns(true)
  post :create, :user => {}
end
于 2010-11-11T08:52:50.587 に答える