0

私は、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 を使用しています。高低を検索しましたが、何も見つかりませんでした。何か案は?

4

1 に答える 1