これを説明する方法がよくわかりません。
RSpec 2.8.1 を実行する既存の Rails 3.1.3 アプリがあり、284 個のテストのテスト スイートがあります。彼らはとても幸せに何度も何度も実行します。
今日、ユーザーが設定を更新するための新しいテストを追加しました -
require 'spec_helper'
describe UserSettingsController do
describe 'PUT "update"' do
let!(:user) { Fabricate :user }
it 'updates the User with the correct attributes' do
proxy = double('proxy') #.as_null_object
controller.should_receive(:current_user).any_number_of_times { proxy }
attributes = Fabricate(:user_settings).stringify_keys
proxy.should_receive(:update_attributes).with(attributes, :as => :updater) { true }
login_user(user)
put :update, :user => attributes
end
end
end
application_controller.rb に current_user も参照する before_filter があるため (モックで予期しないメッセージが表示される)、最初はこのテストが失敗するため、モックを null オブジェクトにすることを考えました (上記のコメントアウトされた領域を参照)。
ただし、これを行うと...テストが終了した後(ただし、次のテストに進む前に)、テストスイート全体が無限ループのようにハングします。
誰もこのようなものを見たことがありますか?.as_null_object を間違って使用していますか?
編集:いくつかのことを明確にするためにlogin_user
、テストで認証するためにソーサリーが提供するヘルパーであり、:user_settings
ファブリケーターはタイムゾーンを含むハッシュを作成しているだけです。