Factory_girl의 연관성과의 건조기 테스트
-
16-09-2019 - |
문제
누구든지 공장이 협회에 미리 구축 된 모델 인스턴스를 사용하도록하는 더 좋은 방법을 제안 할 수 있습니까? 예를 들어, 메시지 공장의 자녀를 정의하여Factory(:my_message)
대체 할 수 있습니다Factory(:message,:sender=>@me)
?
때로는 설정 해시 가이 만난 예제보다 더 관여하거나 많은 테스트에서 반복되어 공장으로 밀어 붙이는 것이 더 나을 것 같습니다.
내가 생각할 수있는 한 가지 대안은 다음과 같은 테스트 도우미 방법을 정의하는 것입니다. create_message_owned_by(@me)
, 그러나 나는 factory_girl 자체 내에 방법이 있기를 바라고 있습니다.
Factory_girl 공장 :
Factory.define :sender do |s|
sender.name "Dummy name"
end
Factory.define :message do |msg|
msg.text "Dummy text"
msg.association :sender
end
Factory.define :my_message, :parent=>:message do |msg|
msg.text "Dummy text"
### ? what goes here for msg.association :sender ? ###
end
MessagesControllerTest 발췌문 (whita 사용) :
context "on GET /messages" do
setup do
@me = Factory(:sender)
@my_message = Factory(:message,:sender=>@me)
@somebody_elses_message = Factory(:message)
sign_in_as(@me)
get :index
end
should "only assign my messages" do
assert_contains(assigns(:messages), @my_message)
assert_does_not_contain(assigns(:messages), @somebody_elses_message)
end
end
해결책
이것이 당신이 찾고있는 것인지 모르겠지만, 처음 메시지를 만들면 발신자를 가져 와서 다음과 같이 할당 할 수 있습니다. @me
.
@my_message = Factory(:message)
@me = @my_message.sender
그것이 전혀 도움이됩니까?
제휴하지 않습니다 StackOverflow