저는 rspec을 사용하는 데있어서 매우 익숙하며 컨트롤러에 대한 테스트를 작성하려고합니다. 나는이 같은이 작업을 테스트하기 위해 노력하고컨트롤러 및 스텁에 대한 RSpec
class CardsController < ApplicationController
before_filter :require_user
def show
@cardset = current_user.cardsets.find_by_id(params[:cardset_id])
if @cardset.nil?
flash[:notice] = "That card doesn't exist. Try again."
redirect_to(cardsets_path)
else
@card = @cardset.cards.find_by_id(params[:id])
end
end
end
: 나는 (내가 스텁에 대한 모카를 사용하고 있습니다)이 컨트롤러가
이describe CardsController, "for a logged in user" do
before(:each) do
@cardset = Factory(:cardset)
profile = @cardset.profile
controller.stub!(:current_user).and_return(profile)
end
context "and created card" do
before(:each) do
@card = Factory(:card)
end
context "with get to show" do
before(:each) do
get :show, :cardset_id => @cardset.id, :id => @card.id
end
context "with valid cardset" do
before(:each) do
Cardset.any_instance.stubs(:find).returns(@cardset)
end
it "should assign card" do
assigns[:card].should_not be_nil
end
it "should assign cardset" do
assigns[:cardset].should_not be_nil
end
end
end
end
end
은 "cardset을 지정해야합니다"테스트를 통과를하지만 이 라인을 올바르게 스터핑하는 방법을 알아낼 수 없습니다. @card = @cardset.cards.find_by_id(params[:id])
"카드를 지정해야합니다"테스트. 이 동작을 테스트하는 가장 좋은 방법은 무엇입니까? 아니면 올바른 추적을하고 있다면 모델 호출을 올바르게 스텁하는 방법은 무엇입니까?
RSpec 2.8에서는'stubs' 메서드가 작동하지 않지만'stub'은 있습니다. 이 문제를 가지고있는 다른 사람은이 개정판을 시도 할 수 있습니다 :'Cardset.stub (: find) .and_return (@cardset)'. – evanrmurphy