0

こんにちは、Ruby on Rails の初心者です。

現在、rspec と FactoryGirl を使用してレール上でコントローラーをテストする際に問題が発生しています。アクション「show」に対応するアクティブレコードをテストしようとしていますが、通過または受信しませんでした。これを修正するためにできることはありますか? ありがとうございました

私が得たエラーは次のとおりです。

 *Failure/Error: Employment::LevelAccess.should_receive(:find).with(@level_access.id.to_s).and_return(@level_access)
   (<Employment::LevelAccess(id: integer, employment_id: integer, accessiblity_id: integer, actions: string, user_id: integer, created_at: datetime, updated_at: datetime) (class)>).find("1")
       expected: 1 time
       received: 0 times*

これが私のコードです

level_access_controller.erb :

context 'require instance' do

  before do
    @level_access = FactoryGirl.create(:level_access_2, employment_id: @employment.id)
  end

  describe 'Get id to Show' do

    it "should find the correct value to show" do
      Employment::LevelAccess.should_receive(:find).with(@level_access.id.to_s).and_return(@level_access)
      get :show, :employment_id => @employment.id, :id => @level_access.id        
    end

  end

  describe 'Get show' do

    before do
      get :show , :employment_id => @employment.id, :id => @level_access.id 
    end

    it "should render a show page" do
      expect(response).to render_template("show")
    end

    it "should not redirect to any page" do
      response.should_not redirect_to("hahahha")
    end

  end        

end

参考までに、私はすでに雇用のインスタンスも作成しています。

Factory/level_access.erb :

FactoryGirl.define do

factory :level_access, class: Employment::LevelAccess do
    employment_id   {FactoryGirl.create(:employment).id}
    actions             'create,update,new,destroy,show'
end

factory :level_access_2, class: Employment::LevelAccess do
    actions             'show'
end

終わり

4

2 に答える 2

0

コントローラーで

def show
  @employee = Employee.find(params[:id])
end

コントローラーの rspec で

before do
  @emp = FactoryGirl.create(:employee)
  get :show , id => @emp.id
end

it "find the employee with provided id" do
  assigns[:employee].should == @emp
end

it "should render a show page" do
  response.should render_template('show')
end

it "should not redirect to any page" do
  response.should_not redirect_to("hahahha")
end

「assigns」を使用すると、スペック内のコントローラーからインスタンス変数にアクセスできます。rspec の正しい書き方の詳細については、http: //betterspecs.org/ をご覧ください。

于 2013-06-20T04:37:28.697 に答える