通过本地传递的travis测试失败

时间:2015-02-20 12:45:13

标签: javascript ruby capybara travis-ci poltergeist

我的测试变成了当地的绿色,在travis上变红了。它是关于这段代码的:

And I change the year to "nineteen-ninenty-seven"                                                                           # features/step_definitions/application_steps.rb:9
And I attempt to save the changes                                                                                           # features/step_definitions/application_steps.rb:17
Then I should see a message indicating that the data is invalid                                                             # features/step_definitions/application_steps.rb:26
  expected to find text "Value must be of type integer." in "Provider configurations root name artist year" (RSpec::Expectations::ExpectationNotMetError)
  ./features/step_definitions/application_steps.rb:27:in `/^I should see a message indicating that the data is invalid$/'
  features/editing_resources.feature:52:in `Then I should see a message indicating that the data is invalid'

这是我的支持/ capybara.rb

require 'capybara/cucumber'
require 'capybara/poltergeist'

Capybara.app = App.new
Capybara.javascript_driver = :poltergeist
Capybara.default_wait_time = 10

关于此代码:

When(/^I change the year to "(.*?)"$/) do |year|
  find('input[name="root[year]"]').set year
end

When(/^I attempt to save the changes$/) do
  find('input[type=submit]')
end

Then(/^I should see a message indicating that the data is invalid$/) do
  expect(page).to have_content('Value must be of type integer.')
end

问题:

当我在当地进行测试时,它们变为绿色。我在那里调试了它。我确信代码运行良好。这些字段存在并填充正确的数据。当我在本地测试中使用pry来表达我期望的信息时,我来源' (或html),我可以自己找到这个文本。在travis / ubuntu上,这不起作用。我可以确认这不起作用,因为我联系了特拉维斯,他们给了我一个虚拟机一天,我复制了这个问题。

为了解决这个问题,我尝试了多种方法,增加了等待时间,尝试了使用chrome / firefox的selenium / webkit和selenium。他们在当地工作,但我不能让他们在travis上正常工作。

我想要实现的是,如果用户没有正确填写字段(本例中为整数字段中的文本),用户会看到正在创建的消息,该测试会验证。

该消息由Json编辑器创建。 https://github.com/jdorn/json-editor 在代码中看起来像这样:

<small class="error">Value must be of type integer.</small>

我认为这是一个逻辑解释:在travis中,dom没有获得最新版本,该版本应该在活动执行后加载(如fill_in或set),并且本地确实有效。

我希望有人有解释和解决方案。

1 个答案:

答案 0 :(得分:1)

虽然我无法为您的确切问题提供答案,但我可以尝试使用您提供的信息帮助您调试问题。

关于恶作剧者:

Poltergeist可让您在测试中的特定位置截取屏幕截图

  

根据您的测试,您可能需要的一些东西是某些字体。如果您在开发期间没有出现CI错误,请尝试拍摄一些屏幕截图

我会尝试在您确定的点之前和之后使用page.save_screenshot,并查看local / travis之间的差异。

编辑:水豚还有一个宝石,可以在测试失败时截取屏幕截图。在此处查找更多信息:Capybara-Screenshot