黄瓜在测试模式下没有使用我可以在开发模式下使用的路由

时间:2014-12-25 22:22:41

标签: routes cucumber capybara padrino

在开发模式下,我可以将浏览器指向http://arewesmallyet.dev/data,并且我看到所有已删除数据的json转储,表明路由映射和应用程序中的数据操作正在执行其工作。 / p>

在/features/step_definitions/landing_steps.rb我有:

When /^I visit the (.*) page$/ do |webpage|
  visit path_to(webpage)
end

在/features/support/url.rb我有:

def path_to(webpage)
  case webpage
    when 'home'
      '/'
    when 'data'
      '/data'
  end
end

rake routes给出:

Application: Arewesmallyet
    URL         REQUEST  PATH
    (:index)      GET    /
    (:data)       GET    /data(.:format)

但是当我运行黄瓜时,我得到了:

Scenario: data page                     # features/landing.feature:10
  Given records exist in the database   # features/step_definitions/landing_steps.rb:9
  When I visit the data page            # features/step_definitions/landing_steps.rb:1
File saved to ~/Developer/Ruby/arewesmallyet/capybara-timestamp.html.
Please install the launchy gem to open the file automatically.
  Then I should be served the json data # features/step_definitions/landing_steps.rb:15
    proper content missing (Minitest::Assertion)
    features/landing.feature:13:in `Then I should be served the json data'

和capybara-timestamp.html的内容来自' /'。当我向步骤添加puts path_to(webpage)时,我会打印正确的路径。但current_url给出了' /'。

如果我将步骤更改为:

When /^I visit the (.*) page$/ do |webpage|
  puts path_to(webpage)
  visit path_to(webpage)
  puts 'first:'+current_path
end

(截断的)输出是:

 When I visit the data page  # features/step_definitions/landing_steps.rb:1
  /data
  first:/

我该如何找到导致这个问题的原因?

我在使用byebug进行调试时发现了一些有趣的东西:

当我告诉Capybara访问' / data' /#39; / data.json',' /data.js&#时,他会尝试访问http://www.example.com 39;,' /'或任何其他路径。由于所有路径都变为http://www.example.com,因此网址没有路径组件,因此我的应用程序显然可以提供' /'。我不想访问远程URL,这就是我使用' /'和' / data'路径和:rack_test驱动程序;但根据https://groups.google.com/forum/#!topic/ruby-capybara/HMKCIDJAA6w资本的讨论,水豚完全被打破了吗?

是否有任何解决方法或这个宝石是否毫无价值?

我在https://groups.google.com/forum/#!topic/ruby-capybara/SaB81spfil8报告了这个问题,我们会看看他们是否还在修理它。

2 个答案:

答案 0 :(得分:0)

您可以使用byebug进行调试,然后单步执行代码以查看发生的情况。将byebug添加到Gemfile中的开发测试组并进行捆绑安装。然后在访问之前在步骤定义中添加一个byebug语句。

我还会在你的控制器中发表一个byebug声明。基本技术是隔离问题,然后介入调查。在这种情况下,您可能需要进入相当多的水豚和机架代码才能解决问题。

话虽如此,我怀疑问题是你的路线。我猜测,与测试时使用的驱动程序相比,浏览器如何解释路由更加自由。所以我会尝试将数据路由更改为'data.json'或data.html,看看会发生什么。如果这不起作用,请将routes.rb的内容添加到您的问题

答案 1 :(得分:0)

Capybara故意使用example.com,如果你没有设置app_host,并且因为我重定向如果域名不正确,那是不可接受的,所以我必须在我的features/support/env.rb文件中设置app host像这样:

Capybara.app_host = 'http://arewesmallyet.dev'