我有一个用户工厂:
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,所以如果有人有任何可能有帮助的建议,我会很感激听到它。谢谢!
答案 0 :(得分:3)
问题在于序列号。您无法在测试中使用hardcorded 'foo1@example.com'
。
无法保证序列号从1开始。我没有时间弄清楚原因,但只知道事实。在我的测试中,我经常在经过几次测试后看到它。
我建议您从FactoryGirl创建的db中的现有用户那里收到电子邮件。
答案 1 :(得分:1)
虽然这不是您的问题,但是在jenkins和测试环境之间获得不同结果的一个可能原因是每个都使用different DBs
。
在我的情况下,我在jenkins上使用sqlite
,在测试中使用postgres
,这产生了不同的结果。
在本地你可以运行
RAILS_ENV="jenkins" bundle exec rspec
在jenkins环境中运行规范。