Заглушить вспомогательный метод из спецификации запроса — rspec3

Я пытаюсь написать спецификацию запроса для своего API. Я использую Rspec 3.

Я хочу заглушить метод в ApplicationHelper. Я использую rabl для рендеринга моего API JSON.

это установка

#ApplicationHelper
module ApplicationHelper
  ...
  def preview_url
  end
  ...
end

Я вызываю метод preview_url из моего файла rabl. Проблема в том, что, поскольку я использую request spec, у меня нет доступа к методу helper, учитывая мой rspec view specs

Ниже приведена моя спецификация.

#spec/request/recipe_spec.rb
require 'rails_helper'
require 'spec_helper'

describe Recipe, 'when viewing the recipe', type: :request,  focus: true do
  ...
  before do
    helper = Object.new.extend(ApplicationHelper)

    allow(helper).to receive(:preview_url).and_return("image.gif")
  end

  it 'some test' do
    ...
  end 
end 

Однако это не заглушит фактический метод в файле ApplicationHelper.

После я безуспешно пытался

allow(ApplicationHelper).to receive(:preview_url).and_return("image.gif") -> doesn't work  

allow_any_instance_of(ApplicationHelper).to receive(:preview_url).and_return("image.gif") -> will not work obviously because application helper is a module 

Как я могу заглушить метод ApplicationHelper из моей спецификации запроса?


person sameera207    schedule 23.07.2015    source источник


Ответы (1)


Поскольку вы просто хотите заглушить вспомогательный метод, а не тестировать сам помощник, вы можете использовать view

  before { allow(view).to receive(:preview_url).and_return('image.gif') }

  it 'some test' do
    render
    expect(rendered).to match /Expected Output/
  end

Наслаждайтесь документацией

person Musannif Zahir    schedule 23.07.2015
comment
спасибо за ответ, однако view недоступен, так как это спецификация запроса spec/requests/* (я пробовал и теперь работаю) - person sameera207; 24.07.2015
comment
Можете ли вы вместо определения helper = Object.new.extend(ApplicationHelper) попробовать просто добавить include ApplicationHelper в свой блок describe и перезапустить вариант allow_any_instance_of? - person Musannif Zahir; 24.07.2015