Skip to content

Instantly share code, notes, and snippets.

@ruvaleev
Created August 4, 2020 03:47
Show Gist options
  • Select an option

  • Save ruvaleev/142f564ad7198edd7f15ea6181e99d31 to your computer and use it in GitHub Desktop.

Select an option

Save ruvaleev/142f564ad7198edd7f15ea6181e99d31 to your computer and use it in GitHub Desktop.
# Вот, например, мы коротко, и с виду, мило применяем put_authenticated
# dictionary_items_api_spec.rb
context 'when PUT v1/dictionary_items/:id' do
subject(:send_request) { put_authenticated("/dictionary_items/#{ id }", params) }
let(:params) { { dictionary_item: attributes_for(:dictionary_item) } }
it_behaves_like 'user authorization required', 'update', 'dictionary_items'
it_behaves_like 'updates and returns updated object', 'dictionary_item' do
let(:object) { dictionary_item }
let(:update_params) { params[:dictionary_item] }
end
end
# support/some_new_helper.rb
def put_authenticated(path, params)
put path, params: params, headers: headers
end
# Но что меня смущает:
# 1) Из теста совсем не очевидно, что headers вообще нужно определять, а так как они у меня в зашаренном контексте,
# то это еще одним квестом может стать для вновь прибывших
# 2) метод у нас называется authenticated (что так и есть), но когда мы вызываем тесты 'user authorization required',
# то мы вызываем все равно его для того, чтобы симулировать не аутентифицированный доступ в том числе.
# В принципе, может быть, не очень критично, но мне кажется, мы слишком многое "под капот" спрячем, а выиграем крупицы.
# Но это вкусовщина, конечно, если думаешь, что лучше так сделать, можно и сделать.
# P.S. были бы это контроллер тесты, мы могли бы просто каким-нибудь before-ом в request.headers добавлять ключи-значения,
# но поскольку это request тесты, то тут объекта  request мы не имеем. Единственный способ его подключить, который я нашел,
# это подключить в rails_helper.rb Rack::Test::Methods, но тогда он вообще замокает нам реквесты )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment