2013-08-13 2 views
4

를 다시로드에서 경비를 방지 포함한다.는 ActionDispatch :: TestProcess가 난 그냥 내가 방법에 대한 오류 찾을 수 없음을받을 사양에 넣을 경우 내 rspecs</p> <p>에서 일부 파일 업로드를 테스트하는 fixture_file_upload을 사용하고 제대로

내 사양에 ActionDispatch :: TestProcess를 포함 시키려고했지만 변경 사항을 적용 할 때 스펙 파일을 올바르게 다시로드하지 않았기 때문에 이전 버전과의 테스트를 계속 실행합니다. 파일들.

가드를 중지하고 다시 시작하여이 문제를 해결할 수 있지만 그 목적을 넘어서는 종류의 공격입니다.

어떻게 이런 일이 발생하지 않도록 할 수 있습니까? fixture_file_upload를 참조하려면 어떻게해야합니까? 아니면 include를 넣어야합니까?

답변

10

정확한 원인을 알 수는 없지만 ActionDispatch::TestProcess에 의해 발생하는 이상한 문제가 있습니다. 그러나 fixture_file_upload 대신 a workaround을 사용할 수 있습니다. 즉, 문제가되는 include을 제거 할 수 있습니다.

당신이 (공장에서 예) 이런 식으로 뭔가가있는 경우 : 당신이 fixture_file_upload의 소스를 보면

Rack::Test::UploadedFile.new('spec/factories/test.png', 'image/png') 

당신이 그것을 볼 수 있습니다 :

include ActionDispatch::TestProcess 

fixture_file_upload('spec/factories/test.png', 'image/png') 

당신이로 교체 할 수 있습니다 기본적으로 위의 코드를 호출합니다.

+3

Fwiw : 'ActionDispatch :: TestProcess'를 전역 적으로 (afaik 공장 파일에서 발생하는) 포함하면'fixture_file_upload' 메소드 이상이 추가되고, 더 나쁜 경우에는 'Object'에 추가됩니다. 추가하는 다른 메소드들에는'# session'과'# cookies'가 있습니다. 이러한 메소드는 include시에 이전에 정의 된 모든 클래스 * 내의'ActionDispatch :: TestProcess' 버전으로 오버로드됩니다. 이것은 여러 가지 이유로 나쁜 소식이며 디버깅하기 힘든 문제를 일으키는 것으로 생각됩니다. –

+0

감사합니다. Joshua, 문제의 원인이 될 수있는 것에 대해 분명히 밝힙니다. – lime