请帮助解决问题。
用帮助工具绑定用户工厂:
module Helpers
def login_user
@user = FactoryGirl.create(:user, :user_status)
visit new_user_session_path
fill_in "user_email", :with => @user.email
fill_in "user_password", :with => "qwerty"
click_button "commitSignIn" #OK sign in
end
def login_manager
@user = FactoryGirl.create(:user, :manager_status)
visit new_user_session_path
fill_in "user_email", :with => @user.email
fill_in "user_password", :with => "qwerty"
click_button "commitSignIn" #OK sign in
end
def login_admin
@user = FactoryGirl.create(:user, :admin_status)
visit new_user_session_path
fill_in "user_email", :with => @user.email
fill_in "user_password", :with => "qwerty"
click_button "commitSignIn" #OK sign in
end
end
但这段代码并不干燥。我需要减少它。 我的解决方案:
module Helpers
after(:each) do
visit new_user_session_path
fill_in "user_email", :with => @user.email
fill_in "user_password", :with => "qwerty"
click_button "commitSignIn" #OK sign in
end
def login_user
@user = FactoryGirl.create(:user, :user_status)
end
def login_manager
@user = FactoryGirl.create(:user, :manager_status)
end
def login_admin
@user = FactoryGirl.create(:user, :admin_status)
end
end
但我的解决方案没有奏效。控制台显示如下:
在'for Helpers:Module之后kalinin@kalinin ~/rails/phs $ rspec spec/helpers/session_helper_spec.rb /home/kalinin/rails/phs/spec/helpers/application_helper_spec.rb:2:in
<module:Helpers>': undefined method
(NoMethodError) 来自/home/kalinin/rails/phs/spec/helpers/application_helper_spec.rb:1:in `'
答案 0 :(得分:0)
after :each
是RSpec允许规范示例的东西,而不是任意方法(因此也不适用于辅助方法)。 (Rails控制器与around_action
具有类似的功能,但它也仅限于控制器中的操作方法。)
怎么样
module Helpers
def login_user(role=:user)
@user = FactoryGirl.create(:user, :"#{role}_status")
visit new_user_session_path
fill_in "user_email", :with => @user.email
fill_in "user_password", :with => "qwerty"
click_button "commitSignIn" #OK sign in
end
def login_manager
login_user(:manager)
end
def login_admin
login_user(:admin)
end
end
(未经测试,可能需要一些摆弄。)