Say У меня есть константа, определенная в Grape::API
классе:окурка константы в апи Grape тест 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
для конечной точки. Я хотел бы заглушить константу MAX_ALLOWED
, так как я не хочу генерировать 50 тыс. Фиктивных данных.
Я попытался 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
, и это также не работает.
EDIT: также опробовал allow
вместо allow_any_instance_of
с таким же результатом.
EDIT 2: вот недостаток спецификации:
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: с запросом в том же it
колодке, stub_const
(до сих пор не удается):
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
Любой Идея, как заглушить константу, определенную в классе Grape::API
для теста RSpec?
вы можете попробовать 'allow (API :: V3 :: Resources :: Activities) .to получать (: MAX_ALLOWED) .and_return (1)'. Также у вас есть 2 имени переменных, один в вашем примере и один в ваших заглушках ... что это? – Anthony
@ Энтони 'allow' не работал, к сожалению. И хороший улов (плохая копия/вставка), я просто обновил вопрос. – mmichael