cabybara-webkit没有评估测试中的rails应用程序中的响应javascript

时间:2013-11-08 03:53:56

标签: javascript ruby-on-rails cucumber capybara-webkit

在rails应用程序中,我在页面上有一个图像(image_submit_tag),当选择该图像时,会向服务器发送ajax请求。服务器接收请求,做正确的事并用正确的javascript响应。正确的javascript将一个图像替换为另一个图像。所有这些都在cucumber / capybara / webkit环境之外工作。换句话说,对于人类而言。

当我使用标有@的webkit(capybara-webkit 1.0.0)运行与黄瓜(1.3.9)/ capybara(2.1.0)下的rails(3.2.9)应用程序的单个测试(功能)相同时我看到不同的结果。

在测试环境中,webkit没有评估响应javascript。相反,在尝试在页面上查找新图标的后续步骤中,当我转储page.html所有报告的是javascript响应时。也就是说,该页面仅包含返回的javascript。

这是应该能够看到新内容的步骤(它与上面的描述不同,因为我已经简化了响应javascript以试图消除js错误的可能性)。

Then(/^the "(.*?)" icon should be displayed$/) do |icon|
  puts "------------------icon display on page------------------"
  puts page.html
  puts "________________________________________________________"
  puts "************* icon displayed response headers ***"
  put page.response_headers.inspect
  puts "*************************************************"
  page.should have_content("some text")
end

我描述了上面的page.html输出,但响应标头添加到拼图中。出于某种原因,webkit(?)认为响应有问题。

bad URI(is not URI?): {"Content-Type"=>"text/javascript; charset=utf-8", 
  "X-Ua-Compatible"=>"IE=Edge,chrome=1", 
  "Etag"=>"\"e7d3ccc2c53dd8e31d6f92d7dbb69dc0\"", 
  "Cache-Control"=>"max-age=0, private, must-revalidate", 
  "X-Request-Id"=>"776cf759cc343884091b5daec6a18587", 
  "X-Runtime"=>"0.048413", 
  "Server"=>"WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)", 
  "Date"=>"Fri, 08 Nov 2013 03:07:43 GMT", 
  "Content-Length"=>"47", "Connection"=>"Keep-Alive"} 
(URI::InvalidURIError)

最后,这里是rails返回的实际javascript,就像我说的那样,我把它剥离到了最低限度。

$('#go_on_duty').parent().html("some text");

从四处寻找答案,我会提出一些问题:
是的,我已经设置了Capybara.javascript_driver =:webkit。
2.是的,该功能被标记为@javascript

那么,有谁知道为什么javascript不会被评估?我怀疑我错过了一些明显的东西,但我的眼睛已经疲惫不堪。

在相关的说明中,我只是这一点,因为我在请求中明确地设置了Accept标头到javascript。我可以这样做b / c我正在使用webkit(如下所示)

page.driver.header 'Accept', 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'

在添加上面的行之前,我的请求是“作为HTML”到达服务器所以我甚至没有得到partial.js.erb呈现。我愿意忍受上述工作的时间,但我不禁想到问题也是相关的,如“我正在忽略一些简单的水豚/铁路/黄瓜配置问题”。同样,这只是测试环境中的一个问题;当人为驱动时,交互按预期工作。


更新

响应大众需求,这里是部分生成image_submit_tag

<%= form_tag(shifts_start_shift_path, :method => :post , :remote => true) do %>
  <%=image_submit_tag("go_on_duty_sign.png", :size=> "35x35", 
                                             :id => "go_on_duty", 
                                             :title=>"Go On Duty") %> 
<% end %>

以下是相关控制器的操作代码:

def start_shift
  @shift = current_staff.current_shift
  if !current_staff.on_duty?
    @task_assignments = TaskAssignment.where(:shift_id => @shift.id)
    respond_to do |format|
      format.js
    end
  end
end

这里是用于渲染响应的start_shift.js.erb模板的js单行(从上面复制,显然,最小化):

$('#go_on_duty').parent().html("some text");

我希望这有助于澄清事情,但是当人为驱动时,我会再次强调这一切。我只看到测试环境下的问题。感谢...


环境:

gem 'rails', '3.2.9'

group :test do
    gem 'cucumber-rails', '1.4.0'
    gem 'rspec-rails', '2.7.0'
    gem 'database_cleaner', '0.7.0'
    gem 'factory_girl', '2.3.2'
    gem 'capybara-webkit', '1.0.0'
end  

0 个答案:

没有答案