【发布时间】:2020-04-08 13:56:51
【问题描述】:
我在评估模型中有范围方法,我在评估集合中调用了 AssessmentsController,但我无法为此方法创建测试,因为:
1) 作为回应,我没有得到 risk_value,但在控制器 (@assessments.with_assessment_progresses(@customer_id)) 中我得到了这个:
[
{
"id": 4,
"name": "Assessment_1",
"created_at": "2020-04-01T17:29:50.528Z",
"updated_at": "2020-04-01T17:29:50.528Z",
"risk_value": "3.92156862745098"
},
...
]
2) 我不明白如何从结果中删除 created_at 和 updated_at。
app/models/assessment.rb
scope :with_assessment_progresses, ->(customer_id) {
joins(Arel.sql("LEFT JOIN assessment_progresses ON (assessment_progresses.assessment_id = assessments.id AND assessment_progresses.customer_id = #{customer_id})")).
select("assessments.*, assessment_progresses.risk_value")
}
spec/models/assessment_spec.rb
describe "Method 'with_assessment_progresses'" do
let!(:admin) { create(:admin) }
let!(:customer) { create(:customer, created_by: admin.id) }
let!(:assessment) { create(:assessment) }
let!(:assessment_progress_1) { create(:assessment_progress, customer_id: customer.id, assessment_id: assessment.id, risk_value: 3.812) }
it "return assessments with risk_value for customer" do
assessment_with_risk = Assessment.with_assessment_progresses(customer.id)
assessment_with_risk.delete("created_at")
assessment_with_risk.delete("updated_at")
expect(assessment_with_risk.length).to eq(1)
expect(assessment_with_risk).to eq(
[
{
"id"=> assessment.id,
"name"=> assessment.name,
"risk_value"=> assessment_progress_1.risk_value
}
]
)
end
end
【问题讨论】:
标签: ruby-on-rails ruby api rspec