Mys*_*srt 5 ruby-on-rails cucumber devise ruby-on-rails-3
我的绝大多数 Cucumber 功能都需要用户登录。但是,我实际上不需要为每个测试都测试登录功能。我目前正在使用 Devise 进行身份验证。
我正在寻找一种使用设备登录用户的方法,而无需填写登录表单。有办法做到这一点吗?我不想在每次测试时都使用登录操作。
不,没有办法。在文档中,关于sign_in @user和sign_out @user辅助方法,它说:
这些助手不适用于 Capybara 或 Webrat 驱动的集成测试。它们仅用于功能测试。相反,填写表单或在会话中显式设置用户
正如您自己所说,用块来完成可能是最干净的before :each。我喜欢将其结构如下:
context "login necessary" do
# Before block
before do
visit new_user_session_path
fill_in "Email", with: "test@test.com"
fill_in "Password", with: "password"
click_button "Login"
assert_contain "You logged in successfully."
end
# Actual tests that require the user to be logged in
it "does everything correctly" do
# ...
end
end
context "login not necessary" do
it "does stuff" do
# code
end
end
Run Code Online (Sandbox Code Playgroud)
我发现这非常有用,因为如果我更改身份验证规则(即用户是否必须登录特定路径),我可以进行整个测试并将其移动到其他描述块中,而无需更改任何内容更多代码。