Dan*_*n L 2 testing rspec-rails ruby-on-rails-4 factory-bot
一个feedback模型需要account存在.每个account都有一个唯一的:在模型中验证的uuid:validates :uuid, presence: true, uniqueness: true
我使用rspec来测试反馈模型,并且Uuid has already been taken每当我构建一个feedback对象时都会出现错误,因为反馈正在构建一个关联的account
require "spec_helper"
describe Feedback do
it "is valid with a message" do
expect(build(:feedback)).to be_valid
end
it "is invalid without a message" do
expect(build(:feedback, message: nil)).to have(1).errors_on(:message)
end
it "is invalid without an associated account" do
expect(build(:feedback, account: nil)).to have(1).errors_on(:account)
end
end
Run Code Online (Sandbox Code Playgroud)
FactoryGirl.define do
factory :feedback do
association :account
message Faker::Lorem.paragraphs
end
end
Run Code Online (Sandbox Code Playgroud)
FactoryGirl.define do
factory :account do
# uuid SecureRandom.uuid # THIS LINE WILL NOT WORK
sequence(:uuid) { |n| n } # THIS LINE WORKS
active true
end
end
Run Code Online (Sandbox Code Playgroud)
正如您在accounts.rb工厂中看到的那样,uuid SecureRandom.uuid当我account在feedback_spec.rb文件中创建一行时,该行似乎总是返回相同的UUID .
我想知道,FactoryGirl是否只构建帐户对象ONCE,然后为每个单独的测试重新使用它?我期待每个帐户对象都有一个唯一的UUID,但这显然不起作用.但是,当我切换到使用该sequence(:uuid) { |n| n }线时它工作得很好.
试图了解FactoryGirl如何创建这些对象以进行测试.这显然不是我的想法.我的测试现在运行正常,但我不理解的事情最终会回来困扰我.
Sam*_*Sam 12
试试这个:
FactoryGirl.define do
factory :account do
uuid { SecureRandom.uuid }
active true
end
end
Run Code Online (Sandbox Code Playgroud)
这将SecureRandom.uuid在每次调用帐户工厂时进行评估,而不是仅在FactoryGirl定义工厂时进行评估.
编辑:
有关详细信息,请参阅Factory Girl Lazy Attributes.
| 归档时间: |
|
| 查看次数: |
1761 次 |
| 最近记录: |