Ответ 1
Я предполагаю, что ApiKey - это модель ActiveRecord, правильно? curl запускается против базы данных разработки, а тесты идут против теста db. Я не вижу ничего, что устанавливает ApiKey в ваших фрагментах. Если у вас его нет в другом месте, попробуйте добавить что-то по этим строкам:
it "passes the token" do
# use factory or just create record with AR:
ApiKey.create!(:access_token => 'test_access1', ... rest of required attributes ...)
# this part remains unchanged
get :new, nil,
:authorization => ActionController::HttpAuthentication::Token.encode_credentials("test_access1")
assigns(:token).should be "test_access1"
end
Затем вы можете переместить его в блок before :each
или модуль поддержки.
UPDATE:
После просмотра вашего комментария мне пришлось смотреть глубже. Вот еще одна догадка. Эта форма get
get '/path', nil, :authorization => 'string'
должен работать только в тестах интеграции. А для контрольных тестов подготовка auth должна выглядеть так:
it "passes the token" do
request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Token.encode_credentials("test_access1")
get :new
assigns(:token).should be "test_access1"
end
Причины этого исходят из сигнатур методов для соответствующих тестовых модулей:
# for action_controller/test_case.rb
def get(action, parameters = nil, session = nil, flash = nil)
# for action_dispatch/testing/integration.rb
def get(path, parameters = nil, headers = nil)