다른 곳에서 이런 종류의 표기법을 보았습니다 : @user = FactoryGirl.create(:user)
,이 인스턴스 변수가 어떻게 동작하는지 정확하게 알 수 없습니다.팩토리 소녀가 만드는 영구 데이터에 인스턴스 변수를 할당하는 동작
특히이 인스턴스 변수의 동작에 대해 궁금합니다. 예를 들어, 현재 RSpec에서 통합 테스트를 만들고 있습니다. (예를 들어, @video.title
사용)) 나는 비디오 인스턴스의 다른 속성을 액세스하는 그 시점에서 아무런 문제가 없다
@video = FactoryGirl.create(:video, title: "Test title")
: 테스트 중 하나에서, 내 비디오 클래스의 인스턴스에 인스턴스 변수를 할당하려 .
그러나 사용자가 양식의 "제목"필드를 지울 수 있도록 통합 테스트를 만들고 비디오가 업데이트되면 데이터베이스에서 제목이 지워집니다. 내가 인스턴스 변수를 사용하여 인스턴스에 액세스 할 때 예를 들어, 어떤 이유
click_link "Edit"
fill_in "Title", with: ""
click_button "Update Video"
expect(find('#title')).to_not have_content "Test title"
는 페이지가 표시됩니다 올바르게하지만, 변화가 발생하지 : print @video.title
반환 "Test title"
무슨 이상한 것은에 있다는 것입니다 다른 통합 테스트 비슷한 프로세스를 사용하여 비디오 인스턴스의 속성을 업데이트합니다 (예 : "업데이트 된 테스트 제목"). 그런 다음 속성이 웹 페이지에서 올바르게 업데이트되었는지 확인하기 위해 테스트했지만이 시간 인스턴스 변수도이를 반영했습니다 (print @video.title
사용).
왜 이런 경우일까요?
DB로부터 레코드를 갱신하기 위해'@ video.reload.title'을 시도하십시오. –
@SergiiK는 올바른 생각을 가지고 있습니다. 단순히'@ video'를 만들 때 데이터베이스 변경 사항 (비디오 객체의 정적 복사본)과의 연결이 끊어지면'reload'가 초기 할당 이후에 변경된 내용을 데이터베이스에서 새로 고쳐지게됩니다. – engineersmnky
@engineersmnky, 고마워,이게 문제를 해결했다! 이 리소스에 대한 리소스가 있습니까? 또는이 문서에서 확인할 수있는 문서가 있습니까? 내 원래 게시물에서도 말할 수 있었을 지 모르지만, 내가 알아 내야 할 질문이 무엇인지 알기가 어려웠습니다. – RyanQuey