В одном из моих контроллеров у меня есть следующий метод:
def show
@icon = @product.icon
raise ActiveRecord::RecordNotFound unless @icon.present?
send_file File.join('public', @icon), type: 'image/png', filename: 'icon.png', x_sendfile: true
end
И я пытаюсь проверить метод следующим образом:
it 'it renders the icon' do
create(:product, icon: 'icon.png')
icon = double('icon', content_type: 'image/png', filename: 'icon.png')
allow_any_instance_of(described_class).to receive(:send_file).and_return(icon)
get(:show, params: { product: 'test' })
expect(response.header['Content-Type']).to eq('image/png')
expect(response.header['Content-Disposition']).to eq("attachment; filename=\"icon.png\"")
end
Так что идея состоит в том, чтобы издеваться ответ send_file
с double
.
Однако я получаю сообщение об ошибке, что шаблон show
отсутствует для этого метода ... так что, похоже, он неправильно выдает ответ, который я хочу. ..
Как я могу получить send_file
, чтобы вернуть смоделированное изображение в соответствии с моим тестом?
Я также пытался: allow(controller).to receive(:render).and_return(icon)
но это просто заканчивается тем, что возвращает пустую строку вместо насмешливого изображения ...