我有一个返回一个链接if user_signed_in?的助手方法。我使用的是Design2.2.8、Rails 3.2.2和Rspec 3.4.0。
application_helper.rb
def session_button
if user_signed_in?
link_to "Restricted Area", user_index_path
else
link_to "Login", new_user_session_path
end
end我的测试是:
application_helper_spec.rb
describe "#session_button" do
context "user signed in" do
login_user
it "returns a link to Restricted Area" do
expect(session_button).to include "Área Restrita"
expect(session_button).to include user_index_path
end
end
context "user not signed in" do
it "returns a link to New Session" do
expect(session_button).to include "Login"
expect(session_button).to include new_user_session_path
end
end
endlogin_user是我的测试中包含的宏。我还加载了TestHelpers。
RSpec.configure do |config|
config.include Devise::TestHelpers, type: :helper
config.extend ControllerMacros, :type => :helper
end问题是:我得到了这个错误:
1) ApplicationHelper#session_button user signed in returns a link to Restricted Area
Failure/Error: if user_signed_in?
NoMethodError:
undefined method `user_signed_in?' for #<RSpec::ExampleGroups::ApplicationHelper::SessionButton::UserSignedIn:0x0000000795a608>我还试着给这个方法留条。
allow(helper).to receive(:user_signed_in?).and_return(true)但我也犯了同样的错误。
我该如何处理这个设计帮手呢?
发布于 2016-02-12 20:48:11
我找到了一种使用匿名助手的方法,但我不知道有没有更好的方法.
RSpec.describe ApplicationHelper, :type => :helper do
helper do
def user_signed_in?
user.present?
end
end
describe "#session_button" do
context "user signed in" do
let(:user) { FactoryGirl.create :user }
it "returns a link to Restricted Area" do
expect(session_button).to include "Área Restrita"
expect(session_button).to include user_index_path
end
end
context "user not signed in" do
let(:user) { nil }
it "returns a link to New Session" do
expect(session_button).to include "Login"
expect(session_button).to include new_user_session_path
end
end
end
endhttps://stackoverflow.com/questions/35167568
复制相似问题