私は、Rails 3.2 のテスト ワークフローを数か月間使用してきました。これは、Rem Zolotykh によるスクリーンキャストから取り上げました。Rails スタックの基本的なコンポーネントを検証するのに簡単で便利です。ただし、Rails 4.0.0 で初めて使用していて、以前にはなかった順序依存エラーが発生しています。これは UsersController の仕様です:
「spec_helper」が必要
describe UsersController do
describe 'POST create' do
let!(:user) { stub_model(User) }
it 'sends new message to User class' do # this is the one that fails intermittently
params = { # call this spec 1
'first_name' => 'Test',
'last_name' => 'Tester',
'email_address' => 'test@test.com',
'password' => 'secret',
'password_confirmation' => 'secret'
}
User.stub(:new).and_return(user)
User.should_receive(:new).with(params)
post :create, user: params
end
it 'sends save message to user model' do # this one always passes
User.stub(:new).and_return(user) # call this spec 2
user.should_receive(:save)
post :create
end
end
end
これはユーザーコントローラーです:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
user = User.new(params[:user])
user.save
render nothing: true
end
end
非常に単純なはずです。ただし、ランダム テスト オーダーが最初にスペック 2 を起動すると、スペック 1 がパスします。仕様 1 が最初に実行されると失敗しますが、仕様 2 は引き続き合格します。仕様 1 の失敗エラー:
1) UsersController POST create sends new message to User class
Failure/Error: post :create, user: params
NoMethodError:
undefined method `save' for #<User:0x007f9d1b6baf98>
# ./app/controllers/users_controller.rb:8:in `create'
# ./spec/controllers/users_controller_spec.rb:32:in `block (3 levels) in <top (required)>'
rspec-core 2.13.1 と rspec-rails 2.13.2 を使用しています。高低を検索しましたが、何も見つかりませんでした。何か案は?