我有一个帮助方法的Rspec测试,需要访问Devise提供的current_user
方法。问题是当我在测试中使用login_user
宏来帮助他们时不起作用!
以下是我的测试结果:
describe 'follow_link' do
before :each do
login_user
end
it "display 'follow' if the curren_user is not following" do
user = Factory :user
helper.follow_link(user).should == 'Follow'
end
end
但它失败了:
Failure/Error: login_user
NoMethodError:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2:0x007faf8c680090>
# ./spec/support/macros.rb:4:in `login_user'
# ./spec/helpers/users_helper_spec.rb:29:in `block (3 levels) in <top (required)>'
那个宏看起来像这样:
def login_user
@user = Factory(:user)
visit new_user_session_path
# fill in sign in form
within("#main_container") do
fill_in "user[email]", with: @user.email
fill_in "user[password]", with: @user.password
click_button "Sign in"
end
end
我已经要求:
require 'spec_helper'
在我的测试中,除了那种方法之外的所有东西仍然不可用。
答案 0 :(得分:1)
通常,在这种情况下,我模拟控制器方法:mock(current_user){nil}
答案 1 :(得分:1)
朋友'访问'是Capybara的方法,用于编写集成测试用例。
对于编写RSpec单元测试用例,您需要存根current_user方法调用,并专注于辅助方法的功能。
describe 'follow_link' do
before :each do
@user = Factory :user
helper.stub(:current_user).and_return(@user)
end
it "display 'follow' if the curren_user is not following" do
helper.follow_link(@user).should == 'Follow'
end
end
答案 2 :(得分:1)
我的错误:
NoMethodError:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0xa49a73c>
由于Capybara 2.0必须使用文件夹spec/features
,所以capybara命令不再适用于文件夹spec/requests
。
帮助我的博客: http://alindeman.github.com/2012/11/11/rspec-rails-and-capybara-2.0-what-you-need-to-know.html
希望你觉得这很有用。