2017-05-15 70 views
0

UJS Rails的在我的网页我有:测试与水豚,硒和RSpec

- >是擦伤另一个网站与UJS提出了Ajax请求内容的形式(远程:真):

<%= simple_form_for @listing, :url => listings_fetch_url, remote: true do |f| %> 
    <%= f.input :url %> 
    <%= f.button :submit, id: 'import_button' %> 
<% end %> 

- >由从形式刮结果填入上述

手动将其作品的另一种形式......

然而W¯¯母鸡我试图自动测试它,它不。 水豚发现提交按钮,点击它,但然后它留在空白页。

下面是测试代码:有以下几种

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 

好像硒无法呈现js.erb rspec的文件?

任何帮助表示赞赏!

EDIT

由于@ThomasWalpole,我固定一个错误500,其是防止机械化刮网络。内容现在被正确地刮取,但问题仍然存在:点击提交按钮后的页面变为空白,测试结束。 在日志中我有一个漫长的消息:

Could not log "render_template.action_view" event. NoMethodError: undefined method 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:in current_example_group'"

这似乎是同样的问题:1 & 2

+0

水豚用硒绝对可以渲染的js。 erb文件。看看你的测试。日志文件并查看正在做什么请求,请求什么格式以及响应代码是什么。是否有任何'Query.new(ScraperService.new({url:url})。perform'向应用程序发出另一个请求,在不同的线程中运行等等?如果是,你使用:puma作为你的Capybara服务器(Capybara.server =:puma)? –

+0

感谢提示@ThomasWalpole!日志显示500个服务器错误,这是由'require'webmock/rspec''导致的,它阻止了机械化访问web。 'Query.new ...'没有向应用程序发出另一个请求,也没有在单独的线程中运行。使用Puma并没有改变任何可悲的事情。 请参阅我的更新问题。 – Greg

+0

尝试降级到rspec 3.5.x。 - 可能是一个错误在3.6 –

回答

1

解决它!

问题来自于我的js.erb 没有在当前页面添加新元素(即:新类,新id,新DOM元素...)。

水豚从未等待Ajax请求完成!

我附加了新的生产线,以我的js.erb:

$("#import_button").addClass("imported"); 

这样,我知道,当导入的类存在于当前页面上就意味着Ajax请求结束。

然后在我的测试中,我添加了以下行:

expect(page).to have_selector :css, '#import_button.imported', wait: 10 

一切正常,现在

PS:this website帮助我理解的问题,以及