如何在 rspec 中测试 before_validation 回调模型问题
How to test before_validation callback model concerns in rspec
我正在学习为我的代码编写规范,但我还是新手。尝试为我的模型问题编写规范/SharedExamples,但我不明白如何编写它,因为我发现它非常复杂。
如果有人可以帮助我或告诉我如何为这些代码编写规范,将会非常有帮助。以下是我关注的 AddStakeholder。
module AddStakeholder
extend ActiveSupport::Concern
included do
before_validation -> { add_stakeholders }
end
private
def add_stakeholders
return unless self.stakeholder
company = if self.is_a?(Certificate)
self.round ? self.round.company : self.company
else
self.company
end
existing_stakeholder = company.stakeholders.find_by_email(self.stakeholder.email)
if existing_stakeholder.present?
if self.stakeholder.name == existing_stakeholder.name
self.stakeholder = existing_stakeholder
else
self.stakeholder.company = company
end
else
self.stakeholder.company = company
end
end
end
您的代码片段中没有足够的信息来准备一个完整的示例,但它看起来有点像:
RSpec.describe Thing, type: :model do
it "adds stakeholders" do
t = Thing.new(...)
expect(t).to be_valid # or .to_not be_valid depending on your validations on Thing
expect(t.stakeholder).to ... # whatever you expect it to be
end
end
我正在学习为我的代码编写规范,但我还是新手。尝试为我的模型问题编写规范/SharedExamples,但我不明白如何编写它,因为我发现它非常复杂。
如果有人可以帮助我或告诉我如何为这些代码编写规范,将会非常有帮助。以下是我关注的 AddStakeholder。
module AddStakeholder
extend ActiveSupport::Concern
included do
before_validation -> { add_stakeholders }
end
private
def add_stakeholders
return unless self.stakeholder
company = if self.is_a?(Certificate)
self.round ? self.round.company : self.company
else
self.company
end
existing_stakeholder = company.stakeholders.find_by_email(self.stakeholder.email)
if existing_stakeholder.present?
if self.stakeholder.name == existing_stakeholder.name
self.stakeholder = existing_stakeholder
else
self.stakeholder.company = company
end
else
self.stakeholder.company = company
end
end
end
您的代码片段中没有足够的信息来准备一个完整的示例,但它看起来有点像:
RSpec.describe Thing, type: :model do
it "adds stakeholders" do
t = Thing.new(...)
expect(t).to be_valid # or .to_not be_valid depending on your validations on Thing
expect(t.stakeholder).to ... # whatever you expect it to be
end
end