1

最近、Ruby on Rails プロジェクトを rspec-core / rspec-rails 2.10.1 から 2.14 にアップグレードしました。現在 (私が恐れていたように) 多くのテストが失敗していますが、それは単にいくつかのメソッドが変更されたからです。私はすでに非推奨 (スタブ! -> スタブ、モック -> ダブル) を修正しましたが、さらにいくつかあります。私がどこでも使用している重要な方法の 1 つは、ここで取り上げたものです: https://www.ruby-forum.com/topic/126993関連付けメソッドをスタブ化する:

module RSpec
  module Mocks
    module Mock
      def stub_association!(association_name, methods_to_be_stubbed = {})
        mock_association = RSpec::Mocks::Mock.new(association_name.to_s)
        methods_to_be_stubbed.each do |method, return_value|
          mock_association.stub(method).and_return(return_value)
        end
        self.stub(association_name).and_return(mock_association)
      end
    end
  end
end

これにより、次のエラー メッセージがスローされます。

 Failure/Error: @foo.stub_association!(:children, :sorted => [])
   Double "Foo_1910" received unexpected message :stub_association! with (:children, {:sorted=>[]})

上記のモジュール名が変更されていると思いますが、どのように正確かわかりませんでした。ヒントをいただければ幸いです。

次に、次のようなコードを使用してコントローラー メソッドをスタブ化しました。

112) ApplicationHelper admin_link_to not logged in: should output nothing
  Failure/Error: stub(:authenticate_with_http_basic).and_return nil
    Stub :authenticate_with_http_basic received unexpected message :and_return with (nil)

コントローラーメソッドはこれです

def admin_link_to(...)
  return link_to(...) if logged_in? and current_user.has_role?(:admin)
end

logged_in?呼び出しますauthenticate_with_http_basic do |login, password| ...。同様にrequest、テスト対象のコントローラーまたはヘルパーに偽の要求オブジェクトを提供するためにスタブを使用していました。

rspec-rails 2.14でこれを行うにはどうすればよいですか?

アップデート

(上記の呼び出しに必要な)Mockへの名前変更とは別に、テスト対象に応じて、呼び出しの前にまたは置く必要があったようです。そうTestDoublestub_association!controllerhelperstub(...)

stub(:authenticate_with_http_basic).and_return nil

になる

helper.stub(:authenticate_with_http_basic).and_return nil

ほとんどの場合、これで問題なく動作します。ただし、名前を変更MockすることTestDoubleはケーキの半分に過ぎませんでした-私はまだstub_association!実際のオブジェクトで私のメソッドを使用することはできず、モック(または現在呼び出されているようにダブル)でのみ使用できます。

だから私はそこに80%います。最後の 20% を獲得した人はいますか? :)

4

0 に答える 0