用Capybara在同一个测试中测试多个会话

113 阅读1分钟

有时你的应用程序中的一个功能会涉及到多个用户之间的来回切换。当需要写一个自动化系统测试时,你可以使用Capybara的using_session 帮助器轻松地模拟用户之间的切换。

你可以在同一个Capybara测试中使用多个会话,而不是登录和退出或伪造另一个用户对应用程序进行更改。

这对于测试通知、聊天等功能非常有用,甚至对于不同用户必须采取行动以推进进程的多人工作流也非常有用。

使用方法

在Capybara中,有几种控制会话的方法。

你可以手动设置会话。

Capybara.session_name = "Test session #1"

但我更喜欢using_session 块帮助器,它将在一个单独的会话中运行块内的任何代码,然后在你离开块时恢复到原始会话。

下面是一个例子,你可以测试一个基本的任务管理系统,用户可以把任务分配给其他人完成。

describe "Task Assignment", type: :system do

  it "allows users to assign tasks to other users" do
    login as: users(:kelly)

    visit "/tasks"

    click_on "Review deliverable"

    click_button "Assign to..."

    select "Sam", from: "Assignee"
    click_button "Save"

    expect(page).to have_content("Status: Pending")
    expect(page).to have_content("Assigned: Sam")

    using_session("Sam") do
      login as: users(:sam)

      visit "/tasks/me"
      expect(page).to have_content("Review deliverable")

      click_on "Review deliverable"
      click_on "Mark complete"
    end

    refresh

    expect(page).to have_content("Status: Completed")
  end
end

其他资源

Capybara文档。使用多个会话