관련 레코드의 평균값을 계산하는 방법을 테스트하는 방법을 결정하려고합니다. 구현을 테스트하고 반환 된 실제 결과가 걱정됩니다. Rspec을 사용하여 Ruby on Rails의 연결 메소드를 테스트하는 방법
는class User
has_many :interviews
def interview_grade
interviews.average(:score).round unless interviews.empty?
end
end
class Interview
belongs_to :user
end
그리고 내가 가지고있는 user_spec.rb
에서
describe "interview_grade" do
let(:user) {User.new}
context "when the user has interviews" do
before { user.stub_chain(:interviews, :empty?){false} }
it "should return an average of the appraisal ratings" do
user.interviews.should_receive(:average).with(:score).and_return(3.2)
user.work_history_grade.should == 3
end
end
context "when the user has no interviews" do
before {Interview.destroy_all}
it "should return nil" do
user.interview_grade.should be_nil
end
end
end
이 테스트를 통과 ... 나는 다음과 같은 모델을 말해봐 그러나 그것은 나에게 깨지기 쉬운 느낀다. interview_grade
이 실제로 합계 (예 :)을 계산해야하는 경우 어떻게됩니까? 특정 메서드 체인이 호출되었다는 것을 테스트하는 중이므로이 통과 테스트는 결과가 실제로 올바르지 않다고 말하지 않습니다.
시험용으로 사용 가능한 점수를 설정하기 위해 스텁을 시도했으나 연관성이 느린 로딩 방식 때문에 레일스 3에서 처리하기가 까다로워 보입니다. 즉, 평균 method
에 응답하지 않기 때문에 인터뷰 개체 배열을 만들 수 없습니다.
큰 호응을 얻었습니다.
여기서 시도해보십시오. 나는 그 생각을하지 않았습니다. 그러나 공장을 사용하는 것을 피하려고합니다. 왜냐하면 공장이 느리기 때문입니다. 나는 user.interviews를 모의하고 싶다.하지만 질문에서 언급했듯이, 레일스 3에서 연결을 지연 적으로로드하기 때문에 좋은 방법을 찾지 못했다. –