我创建了一个rspec测试,如下所示:
it "should redirect to '/tavern' with an error if user already has a tavern quest" do
user = mock('User')
user.stub(:has_tavern_quest).and_return(true)
post :new_quest, :quest_type => 3
flash[:error].should_not be_nil
response.should redirect_to tavern_path
end然后,我编写了控制器部分:
# check if user already has a tavern quest
if current_user.has_tavern_quest?
flash[:error] = 'You already have a quest to finish !'
redirect_to tavern_path and return
end 和模型部分:
def has_tavern_quest?
TavernQuest.exists?(self.id)
end 我希望测试成功,但是现在我得到了:
1) TavernController POST '/quest/' to get a new quest of quest_type == 3 should redirect to '/tavern' with an error if user already has a tavern quest
Failure/Error: flash[:error].should_not be_nil
expected: not nil
got: nil
# ./spec/controllers/tavern_controller_spec.rb:29我是不是搞错了?
登录用户的宏:
module ControllerMacros
def login_user
before(:each) do
@request.env["devise.mapping"] = :user
@user = Factory.create(:user)
sign_in @user
end
end
end发布于 2011-03-10 15:45:16
未经测试:
it "should redirect to '/tavern' with an error if user already has a tavern quest" do
controller.stub_chain(:current_user,:has_tavern_quest?).and_return(true)
post :new_quest, :quest_type => 3
flash[:error].should_not be_nil
response.should redirect_to tavern_path
end发布于 2011-03-10 12:35:15
你的嘲笑什么也做不了..。也许你是想在什么地方用它?
我个人不喜欢在这种情况下嘲笑,觉得这是一种混淆。如果你使用的是Devise,你可以使用their test helpers to sign in as a user。
https://stackoverflow.com/questions/5255345
复制相似问题