cabybara webkit未评估测试中rails应用程序中的响应javascript

cabybara webkit未评估测试中rails应用程序中的响应javascript,javascript,ruby-on-rails,cucumber,capybara-webkit,Javascript,Ruby On Rails,Cucumber,Capybara Webkit,在rails应用程序中,我在页面上有一个图像(image_submit_标记),选中该图像后,会向服务器发送一个ajax请求。服务器接收请求,执行正确的操作,并使用正确的javascript进行响应。正确的javascript将一个图像替换为另一个图像。所有这些都在cucumber/capybara/webkit环境之外工作。换句话说,对人类来说 当我使用带有@javascript标记的webkit(capybara webkit 1.0.0)在cucumber(1.3.9)/capybara(

在rails应用程序中,我在页面上有一个图像(image_submit_标记),选中该图像后,会向服务器发送一个ajax请求。服务器接收请求,执行正确的操作,并使用正确的javascript进行响应。正确的javascript将一个图像替换为另一个图像。所有这些都在cucumber/capybara/webkit环境之外工作。换句话说,对人类来说

当我使用带有@javascript标记的webkit(capybara webkit 1.0.0)在cucumber(1.3.9)/capybara(2.1.0)下对rails(3.2.9)应用程序进行与单一测试(功能)相同的测试时,我看到了不同的结果

在testenv中,webkit不会对响应javascript进行评估。相反,在尝试在页面上查找新图标的后续步骤中,当我转储page.html时,报告的只是javascript响应。也就是说,页面只包含返回的javascript

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

我在上面描述了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");
通过四处寻找答案,我可以预料到一些问题:
1.是的,我已经设置了Capybara.javascript\u driver=:webkit
2.是的,该功能被标记为@javascript

那么,有人知道为什么javascript不会得到评估吗?我暗自怀疑我错过了一些显而易见的东西,但我的眼睛已经变得疲倦了

与此相关的是,我之所以这么做,是因为我在请求中将Accept头显式设置为javascript。我可以这样做,因为我正在使用webkit(如下所示)

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


更新:

为了响应大众的需求,这里有一个生成图像提交标签的部分

<%= 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 %>
下面是用于呈现响应的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  

你能粘贴真实的测试代码而不是所有的“puts”吗?“真实的测试代码”本质上是一个页面。应该有内容(“hello world”)断言。关键是,页面不包含对返回javascript的评估所期望的DOM更改,而只包含javascript本身。puts旨在准确指示我如何/在何处看到问题。抱歉,我无法使用一块文本和一个断言进行调试。请参阅上面的更新。感谢您的关注…一些可能有助于调试的建议:1)尝试将驱动程序从:webkit更改为:webkit_debug;2)尝试使用save_屏幕截图,而不是转储页面的HTML。
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
$('#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