모델의 "읽기 전용"동작을 어떻게 지정합니까?
-
22-08-2019 - |
문제
예를 들어, 내가 있다고 가정 해 봅시다 Question
부울 필드가있는 모델 answered
그리고 closed
. 질문의 행동을 어떻게 테스트 할 것인가? should be read only when marked as answered
RSPEC 사용? 이것은 모델의 동작 인 것 같지만 가장 잘 테스트하는 방법을 잘 모르겠습니다. 이 동작을 위해 이전 필터를 사용하고 대답 된 질문을 수정할 수 없다는 오류를 추가해야합니까? 아니면 더 좋은 방법이 있습니까? 저는 RSPEC와 BDD 만 배우고 있습니다.
해결책
작동하는 방식에 따라 다르지만 ...
describe Question do
it "should be read only when marked as answered" do
question = Question.new(:title => 'old title')
question.answered = true
question.save
# this
lambda {
question.title = 'new title'
}.should raise_error(ReadOnlyError)
# or
question.title = 'new title'
question.save
question.title.should == 'old title'
# or
quesiton.title = 'new title'
question.save.should be_false
end
end
아니면 저장시 오류를 제기하고 싶습니까? 아니면 오류가없고 조용히 값을 변경하지 않습니까? 당신이 그것을 구현하고 싶은 방식은 당신에게 달려 있지만 방법론은 동일합니다.
- 사양하려는 상태에서 객체를 설정하십시오.
- 해당 상태의 대상이 당신이 기대하는 일을하도록하십시오.
따라서 답변 된 질문을 설정 한 다음 데이터를 변경할 수 있는지 확인하십시오. 할 수 없다면 사양이 통과되었습니다. 모델의 행동이 작동하기를 원하는 것은 당신에게 달려 있습니다. 그리고 BDD의 가장 큰 장점은이 인터페이스에 대해 먼저 생각하는 것입니다. 왜냐하면 실제로 객체 API를 사용하여 사양하려면 객체 API를 사용해야하기 때문입니다.
제휴하지 않습니다 StackOverflow