功能规范每次都在RSpec中传递,在Jenkins中失败

时间:2013-04-21 12:53:30

标签: ruby-on-rails rspec jenkins

我有一个用户工厂:

FactoryGirl.define do
  factory :user, :aliases => [:assignee] do
    sequence(:email) { |n| "foo#{n}@example.com" }
    sequence(:username) { |n| "foo#{n}@example.com" }
    profile

  end
end

还有一家工厂:

FactoryGirl.define do
  factory :job do
    association :assignee, factory: :user
    description "MyText"
    completion_comment "MyText"
    job_type "MyString"
    ...
  end
end

哪些已加载到我的jobs_feature_spec_helper:

def add_valid_job
  click_job
  within("#add_job") do
    select 'foo1@example.com', from: 'Assignee'
    fill_in_html("job__textarea", {:with => job[:description]})
    click_button "Save"
  end
end

我的功能页规格在我的机器上通过了RSpec,但是我的雇主给我发了一封电子邮件,说詹姆斯的规格失败了。这是他发来的信息:

Unable to find option "foo1@example.com <mailto:foo1@example.com>"
./spec/support/job_feature_spec_helpers.rb:11:in `block in add_valid_job'
./spec/support/job_feature_spec_helpers.rb:10:in `add_valid_job'
./spec/features/jobs/edit_job_line_spec.rb:8:in `block (2 levels) in <top (required)>' 

所以,看起来当詹金斯运行规范时,它没有从下拉列表中找到受让人,但是RSpec是。我从来没有亲自使用过Jenkins,所以如果有人有任何可能有帮助的建议,我会很感激听到它。谢谢!

2 个答案:

答案 0 :(得分:3)

问题在于序列号。您无法在测试中使用hardcorded 'foo1@example.com'

无法保证序列号从1开始。我没有时间弄清楚原因,但只知道事实。在我的测试中,我经常在经过几次测试后看到它。

我建议您从FactoryGirl创建的db中的现有用户那里收到电子邮件。

答案 1 :(得分:1)

虽然这不是您的问题,但是在jenkins和测试环境之间获得不同结果的一个可能原因是每个都使用different DBs

在我的情况下,我在jenkins上使用sqlite,在测试中使用postgres,这产生了不同的结果。

在本地你可以运行

RAILS_ENV="jenkins" bundle exec rspec

在jenkins环境中运行规范。