使用Cucumber,有没有一种方法可以在没有界面的情况下登录用户?

Mys*_*srt 5 ruby-on-rails cucumber devise ruby-on-rails-3

我的绝大多数 Cucumber 功能都需要用户登录。但是,我实际上不需要为每个测试都测试登录功能。我目前正在使用 Devise 进行身份验证。

我正在寻找一种使用设备登录用户的方法,而无需填写登录表单。有办法做到这一点吗?我不想在每次测试时都使用登录操作。

dch*_*cke 2

不,没有办法。在文档中,关于sign_in @usersign_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)

我发现这非常有用,因为如果我更改身份验证规则(即用户是否必须登录特定路径),我可以进行整个测试并将其移动到其他描述块中,而无需更改任何内容更多代码。