2016-08-04 2 views
2

컨트롤러에서 create 메소드를 테스트하는 내 애플리케이션 용 컨트롤러 스펙이 있습니다. create 액션은 실제로 정상적으로 작동하지만 스펙이 실패합니다. 해시 POST 매개 변수를 자동으로 문자열로 변환하는 것 같습니다. 내가 puts coupon 할 경우해시를 문자열로 변환하는 RSpec 컨트롤러 테스트

let(:coupon) { attributes_for(:coupon) } 

describe 'POST #create' do 
    it 'should create a new coupon from params' do 
    expect { 
     post :create, :coupon => coupon 
    }.to change(Coupon, :count).by(1) 
    end 
end 

는 지금, 그것은 데이터의 유효한 해시를 생성하고, 유형은 해시입니다. 어떤 이유로 컨트롤러가 params [: coupon] 문자열을 수신하고 있습니다. rspec 테스트에서만이 일이 발생합니다. POST 양식을 사용하여 찾아보기를 테스트 할 때 완벽하게 작동합니다.

NoMethodError: 
    undefined method `permit' for #<String:0x00000005062700> 
    Did you mean? print 

을 내가 RSpec에있는 컨트롤러 puts params[:coupon].class을 할 경우 나에게 문자열을 제공합니다

RSpec에 다음과 같은 메시지가 발생합니다. 왜 내 해시를 POST 요청의 문자열로 변환 할 수 있으며이를 방지하려면 어떻게해야합니까?

나는 JSON의 API 엔드 포인트를 테스트 할 때 동일한 동작이 최근에 나를 위해 나타났다 3.5.1

답변

0

어떻게 든 시험에서 내 게시물의 요청을 변환 보석 open_taobao에 문제가 있었다 것으로 보인다.

1

레일 5.0.0와 RSpec을 사용하고 있습니다. 원래 내 대상으로이 있었다 :

subject { put :my_endpoint, **input_args } 

input_args의 정수 값을 문자열로 변환하기했다. 수정은 put에 추가 키워드 인수로 format: 'json'을 추가했다 :

subject { put :my_endpoint, **input_args, format: 'json' } 
+0

불행히도이 문제는 해결되지 않았으므로 다양한 JSON 함수를 사용하여 테스트를 진행하고 있습니다. 내 전체 쿠폰 해시가 문자열로 변환됩니다. 컨트롤러에서 params.require (: coupon)를 사용하면 해시가 아닌 문자열이 표시되므로 해시의 값에 액세스 할 수 없습니다. –

관련 문제