【发布时间】:2017-05-15 14:59:39
【问题描述】:
在我的页面上有:
-->使用 ujs 发出的 Ajax 请求抓取另一个网站内容的表单(remote: true):
<%= simple_form_for @listing, :url => listings_fetch_url, remote: true do |f| %>
<%= f.input :url %>
<%= f.button :submit, id: 'import_button' %>
<% end %>
-->另一个由上面表单的抓取结果填充的表单
手动操作...
但是,当我尝试自动测试它时,它没有。 Capybara 找到了提交按钮,点击了它,但它让我留在了一个空白页面上。
这是测试的代码:
feature "Listing import" do
scenario "fills in the form fields", js: true do
visit new_search_path
fill_in 'Url', :with => 'www.google.fr'
find('input#import_button').click
expect(page.body).to have_content 'query was'
end
end
控制器操作如下:
def fetch
url = listing_params[:url]
@query = Query.new(ScraperService.new({url: url}).perform)
render :fill
end
# Renders an js.erb file
def fill
end
似乎带有 selenium 的 rspec 无法渲染 js.erb 文件?
感谢任何帮助!
编辑
感谢@ThomasWalpole,我修复了阻止 Mechanize 抓取网络的错误 500。内容现在已正确抓取,但问题仍然存在:单击提交按钮后的页面变为空白,测试随即结束。 在日志中我有一条很长的消息:
无法记录“render_template.action_view”事件。无方法错误: 未定义的方法
example_group' for nil:NilClass ["/Users/Greg/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rspec-rails-3.6.0/lib/rspec/rails/view_rendering.rb:67:incurrent_example_group'"
【问题讨论】:
-
Capybara with Selenium 绝对可以渲染 js.erb 文件。查看您的 test.log 文件并查看正在发出的请求、请求的格式以及响应代码是什么。
Query.new(ScraperService.new({url: url}).perform中的任何一个是否向应用程序发出另一个请求,在单独的线程中运行等?如果是这样,您是否使用 :puma 作为您的 Capybara 服务器 (Capybara.server = :puma)? -
感谢@ThomasWalpole 的提示!日志显示由
require 'webmock/rspec'引起的 500 服务器错误,这阻止了 Mechanize 访问网络。Query.new...没有向应用程序发出另一个请求,也没有在单独的线程中运行。可悲的是,使用 Puma 并没有改变任何东西。请查看我更新的问题。 -
尝试降级到 rspec 3.5.x 。 -- 可能是 3.6 中的一个错误
-
降级到 rspec 3.5.x 消除了日志中冗长的错误!
标签: ruby-on-rails selenium rspec capybara ujs