MERB에서 인증 된 파일 업로드 테스트
-
12-09-2019 - |
문제
이것은 지난 며칠 동안 나를 화나게 한 것입니다. 인증 된 사용자가 사이트에 자산을 업로드 할 수있는 조치가 있습니다. 프로세스를 수동으로 실행할 수 있으므로 컨트롤러 동작이 정확하지만 RSPEC을 사용하여 테스트하고 싶습니다.
나는 그것을 사용해야한다 request
도우미는 인증 된 세션을 재사용 할 수 있습니다. :given
이 테스트 세트.
it "should allow authenticated file uploads" do
file = File.open(a_valid_file)
mock_file = mock("file")
mock_file.stub!(:path).and_return(file.path)
request( resource(:assets), :method => "POST",
:params => { :file =>
{:tempfile => mock_file, :filename => File.basename(file.path)} }
)
end
사양 내부의 중단 점은 모두 잘 작동하지만 사양을 실행하고 디버거를 통해 컨트롤러 작업의 경로에 액세스하려고 할 때 다음과 같습니다.
e file[:tempfile].path
NoMethodError Exception: undefined method `path' for "#[Spec::Mocks::Mock:0x3fda2a4736c0 @name=\"file\"]":String
내 생각에 stub!(:path)
요청을 통해 Mock 객체가 만들어지는 모든 것에 대해 설정되지 않습니다.
문제는 : 파일 업로드를 테스트하기위한 올바른 방법을 가고있는 것입니다. 다른 방법이 아니라면?
해결책
나는 그것을 잘못하고 있었다. 사용하여 request
그것은 모든 매개 변수에서 to_s를 호출하고 있었기 때문에 "#[spec :: mocks :: mock : 0x3fda2a4736c0 @name = "file "]로 전달되었습니다. 그것은 예외 출력에 더 많은주의를 기울이는 것을 가르쳐 줄 것입니다.
대신 사용해야합니다 multipart_post
인증 호출을 블록에서 스터브합니다.
it "should allow authenticated file uploads" do
file = File.open(a_valid_file)
multipart_post( resource(:assets), :method => "POST",
:params => { :file => file } ) do |controller|
controller.stub!(:ensure_authenticated).and_return(true)
controller.session.stub!(:user).and_return(User.first)
)
end
제휴하지 않습니다 StackOverflow