Rspec功能测试:无法访问路径
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rspec功能测试:无法访问路径相关的知识,希望对你有一定的参考价值。
我有rspec功能测试都失败了因为我无法访问指定的路径。登录后,它们似乎都停留在根路径上。屏幕截图显示页面仍然保留在根路径上。测试步骤适用于浏览器,这意味着路由正确。有任何想法吗?
我收到以下测试错误消息:
失败/错误:page.evaluate_script('jQuery.active')。零?
我的功能规范测试的摘录:
describe 'follow users' do
let!(:user) { FactoryGirl.create(:user) }
let!(:other_user) { FactoryGirl.create(:friend) }
describe "Managing received friend request", js: true do
let!(:request) { Friendship.create(user_id: other_user.id, friend_id: user.id, accepted: false) }
before do
login_as(user, :scope => :user)
visit followers_path
end
it 'friend request disappear once user clicks accept' do
click_on "Accept"
wait_for_ajax
expect(current_path).to eq(followers_path)
expect(page).to have_css(".pending-requests", text: "You have 0 pending friend requests")
expect(page).to_not have_css(".pending-requests", text: other_user.name)
expect(page).to_not have_link("Accept")
expect(page).to_not have_link("Decline")
end
end
end
这里的问题是你在不包含jQuery的页面上或者在尚未加载的时候调用'wait_for_ajax'。解决方案是停止使用wait_for_ajax
,而是按照设计使用Capybara期望/匹配器。实际上需要wait_for_ajax
的情况非常少,即使这样,它通常也是UI决策错误的标志(没有任何迹象表明用户正在发生的事情)。您也不应该使用eq
匹配器和current_path
,并且应该使用Capybara提供的have_current_path
匹配器,因为它具有像所有Capybara提供的匹配器一样的等待/重试行为。
it 'friend request disappear once user clicks accept' do
click_on "Accept"
expect(page).to have_current_path(followers_path)
expect(page).to have_css(".pending-requests", text: "You have 0 pending friend requests")
expect(page).to_not have_css(".pending-requests", text: other_user.name)
expect(page).to_not have_link("Accept")
expect(page).to_not have_link("Decline")
end
如果这对你不起作用,那么按钮点击实际上不会触发页面更改(检查测试日志),你的Capybara.default_max_wait_time
设置得不够高,你所测试的硬件,你的login_as
语句不是'实际上登录用户(虽然我希望点击接受按钮失败),或者你的应用程序中有一个错误。
如果login_as
实际上没有登录,那么确保用于运行AUT的服务器在与测试相同的过程中运行,如果你使用puma
这意味着确保在输出中它没有说出来在群集模式下运行。
尝试这种方法等待所有ajax请求完成:
def wait_for_ajax
Timeout.timeout(Capybara.default_wait_time) do
active = page.evaluate_script('jQuery.active')
until active == 0
active = page.evaluate_script('jQuery.active')
end
end
end
取自:Wait for ajax with capybara 2.0
以上是关于Rspec功能测试:无法访问路径的主要内容,如果未能解决你的问题,请参考以下文章