我刚刚开始在Rails中学习使用rspec进行测试。 我有一个用户模型,我正在尝试编写一个测试来签署用户。以下工作:
describe "user login" do
let(:user) { FactoryGirl.create(:user) }
it "logs user in" do
visit root_path
click_link "Log In"
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button "Submit"
expect(page).to have_content("You are now logged in.")
end
end
在我的application_controller.rb
我有以下方法:
def sign_in(user)
cookies.permanent[:auth_token] = user.auth_token
current_user = user
end
helper_method: sign_in
我想知道为什么我的sign_in
方法在以下测试中不起作用:
describe "user login2" do
let(:user) { FactoryGirl.create(:user) }
it "logs user in" do
sign_in(user)
expect(page).to have_content("You are now logged in.")
end
end
我收到以下错误:Failure/Error: sign_in(user)
NoMethodError:
undefined method 'sign_in'
答案 0 :(得分:0)
集成测试背后的想法是,您以与普通用户相同的方式与界面进行交互。这是您在使用Capybara进行的第一次测试中所做的。
在第二个测试中,您可能必须先包含控制器代码,然后才能调用辅助方法。但是测试仍然无效,因为您尝试测试页面上是否显示了某些内容,尽管您尚未调用访问。
如果要编写集成测试,则应该进行第一次测试。
如果您想编写更多较低级别的测试,可以直接从控制器登录用户,但是您必须以不同的方式对其进行验证。通过控制器/模型的某些属性或直接从数据库中获取。