我有一个使用Capybara的基本集成测试,问题是如果我不首先创建所需的对象,集成测试就会失败。在使用Capybara进行集成测试的第一步中,我是否需要创建所有对象?我使用Rails 4.2.4
和Capybara 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
如果对象创建影响了您在水豚测试中使用visit
-ing的页面,那么是的,您需要在测试该页面上的元素之前创建对象,因为访问该页面时,测试浏览器已经获取了其内容。
我假设您在sign_in
方法中成功登录时有一个visit "some_login_page"
,也许还有一个重定向,所以在完成sign_in
时,测试浏览器已经访问(即抓取)了您稍后尝试测试内容的页面。
我脑海中唯一的例外是,如果您使用延迟的AJAX请求将新创建的元素从服务器动态地抓取到页面上——在这种情况下,在页面visit
之后创建对象可能会正常工作。