致力于开发的恶作剧者,而不是 CI

poltergeist working on development, not on CI

我一直在使用 poltergeist 和 capybara 为我的网站编写一些测试,它们都在我的开发机器上通过,但在我使用的持续集成平台 (Codeship) 上却失败了。我查了一下并尝试了所有不同的解决方案,但唯一能让它工作的是如果我切换到硒,如果可能的话我宁愿不这样做。我想知道是否有人对此有一些建议,我在网上看到了很多关于它的话题,但到目前为止对我没有任何帮助。

在我的代码中 page.should have_content("Post created successfully.") 是我所有测试都失败的地方,因为它无法在创建地图文件时加载的页面上找到此消息(因为它还没有到达那里)因为某些原因)。我尝试过所有类型的睡眠,现在 spec_helper.rb.

中的等待时间设置为 20 秒

示例代码如下:

add_mapfile_spec.rb

before(:each) do 
    sign_in_and_create_facility
end

scenario 'Creating a mapfile works from locations path' do
    add_mapfile_to_facility_from_main("Bat Cave", "save")  

    page.should have_content("Post created successfully.")
    page.should have_content("Facility: Bat Cave")
    page.should have_content("definitelynotbrucewayne@digitallumens.com")
    page.should have_content("save.map")
    page.should have_content("Cannot Move")


    visit locations_path
    page.should have_content("definitelynotbrucewayne@digitallumens.com")
    page.should have_content("save.map")
end

添加映射文件功能

  def add_mapfile_to_facility_from_main(name, mapfile)
    visit locations_path
    find('#create-map').click
    select "#{name}", :from => "post[location_id]"
    attach_file('post_mapfile', File.join(Rails.root.to_s, 'spec', 'fixtures', "#{mapfile}.map"))
    find('#submit-map').click
    sleep(1)
  end

Sign_in_and_create_facility 按预期工作,所以我知道它不是那个功能。 js 在这些上设置为 true。

非常感谢任何帮助,我已经为此苦苦挣扎了几天

这可能是由于多种原因造成的...我的建议是调试它以查看失败后生成的屏幕截图...将下面的代码添加到 spec_helper 中的水豚配置中:

Capybara::Screenshot.register_filename_prefix_formatter(:rspec) do |example|
    "screenshot_#{example.description.gsub(' ', '-').gsub(/^.*\/spec\//,'')}"
end
screenshot_path = "#{PROJECT_ROOT}/screenshot/"
config.save_and_open_page_path = screenshot_path

真的从来没有找到答案,只是偶尔 failed/passed,所以我添加了一个名为 rspec-rerun 的新 gem,并将其设置为 CI平台。多次重新运行测试似乎可以正常工作,但速度不快。