Capybara集成测试对象创建

时间:2016-05-19 14:39:39

标签: ruby-on-rails ruby capybara

我有一个使用Capybara的基本集成测试,问题是如果我不首先创建所需的对象,那么集成测试就会失败。我是否需要创建所有对象作为使用Capybara进行集成测试的第一步?我正在使用Rails 4.2.4Capybara 2.4.3

故障

scenario 'if media content contains more than 10 items display pagination links' do 
  sign_in
  # Object creation
  11.times do 
    FactoryGirl.create(:media_content)
  end
  within '.pagination' do 
    expect(page).to have_content '1'
  end
end

成功

scenario 'if media content contains more than 10 items display pagination links' do
  # Object creation
  11.times do 
    FactoryGirl.create(:media_content)
  end
  sign_in
  within '.pagination' do 
    expect(page).to have_content '1'
  end
end

1 个答案:

答案 0 :(得分:3)

如果对象创建影响您在capybara测试中visit - 的页面,那么您需要在测试该页面上的元素之前创建对象,因为访问该页面,其内容已被测试浏览器抓取。

我假设您在visit "some_login_page"方法成功登录时有一个sign_in并且可能是重定向,因此在完成sign_in时,测试浏览器已经访问过(即抓住)了您之后尝试测试内容的页面。

我想到的唯一例外是,如果您使用延迟的AJAX请求将新创建的元素从服务器动态地抓取到页面 - 在这种情况下,在页面后创建对象 {{ 1}}可以正常工作。