가 나는 Grape::API
클래스에 정의 된 상수를 가지고 말에서 일정한에게 : 스텁 포도 API를 RSpec에 테스트
class Activities < Grape::API
MAX_ALLOWED = 50000
...
end
그리고 엔드 포인트 desc
에서
params do
requires :data, type: Array, allow_blank: false, array_length: MAX_ALLOWED
end
내가 스펙을 작성하려는 (RSpec 사용)을 사용하여 엔드 포인트에 대한 array_length
옵션을 테스트하십시오. 실제로 더미 데이터를 50k 생성하고 싶지 않기 때문에 MAX_ALLOWED
상수를 스텁하고 싶습니다.
stub_const(API::V3::Resources::Activities::MAX_ALLOWED, 3)
을 시도했지만 오류가있어 : NoMethodError: undefined method 'sub' for 40000:Fixnum
가 나는 또한
stub_const('API::V3::Resources::Activities::MAX_ALLOWED', 3)
을 시도했지만 그건 그냥 작동하지 않았다입니다.
before do
allow_any_instance_of(API::V3::Resources::Activities).to receive(:MAX_ALLOWED).and_return(1)
end
을하고 또한 작동하지 않았다 :
마지막으로, 나는 시도했다.
편집 : 또한 allow_any_instance_of
대신에 을 시도했습니다.
EDIT 2
it 'returns a 400' do
stub_const('API::V3::Resources::Activities::MAX_ALLOWED', 3) # this doesn't work
contacts_api :post, "#{uri}#{resource}", request.to_json, options
expect(response.status).to eq(400)
expect(resp_body['error_key']).to eq('contacts.api.bad_request')
expect(resp_body['error_message']).to eq('too many contacts')
end
상관 다음 stub_const
(계속 실패) 같은 it
블록 내의 요청 :
context 'with more than 50,000 contacts' do
let(:options) {{ 'CONTENT_TYPE' => 'application/json' }}
# contacts_api, uri, resource, and request are defined elsewhere
before { contacts_api :post, "#{uri}#{resource}", request.to_json, options }
# Also tried this instead of stub_const:
# before do
# allow_any_instance_of(API::V3::Resources::Activities).to receive(:MAX_ALLOWED).and_return(1)
# end
it 'returns a 400' do
stub_const('API::V3::Resources::Activities::MAX_ALLOWED', 3)
expect(response.status).to eq(400)
expect(resp_body['error_key']).to eq('api error')
expect(resp_body['error_message']).to eq('too many contacts')
end
end
EDIT 3 : 여기는 실패한 사양의 RSpec 테스트를 위해 Grape::API
클래스에 정의 된 상수를 스텁하는 방법은 무엇입니까?
allow (API :: V3 :: Resources :: Activities) .to (: MAX_ALLOWED) .and_return (1)'을 시도해 볼 수 있습니까? 또한 변수 이름이 2 개 있는데, 하나는 예제에, 다른 하나는 스텁에 있습니다. 그게 무엇입니까? – Anthony
@Anthony'allow'는 불행하게도 작동하지 않았습니다. 그리고 좋은 캐치 (나쁜 사본/붙여 넣기), 나는 방금 질문을 업데이 트했습니다. – mmichael