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