我的测试变成了当地的绿色,在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),并且本地确实有效。
我希望有人有解释和解决方案。
答案 0 :(得分:1)
虽然我无法为您的确切问题提供答案,但我可以尝试使用您提供的信息帮助您调试问题。
关于恶作剧者:
Poltergeist可让您在测试中的特定位置截取屏幕截图
根据您的测试,您可能需要的一些东西是某些字体。如果您在开发期间没有出现CI错误,请尝试拍摄一些屏幕截图
我会尝试在您确定的点之前和之后使用page.save_screenshot
,并查看local / travis之间的差异。
编辑:水豚还有一个宝石,可以在测试失败时截取屏幕截图。在此处查找更多信息:Capybara-Screenshot