Что я делаю неправильно с этим вспомогательным тестом rspec?

Все, что я пытаюсь сделать, это указать, как должен вести себя однострочный вспомогательный метод для представления, но я не уверен, какой фиктивный объект (если таковой имеется) мне следует создать, если я работаю в Rails.

Вот код для events_helper.rb:

module EventsHelper

  def filter_check_button_path
    params[:filter].blank? ? '/images/buttons/bt_search_for_events.gif' : '/images/buttons/bt_refine_this_search.gif'
  end
end

А вот мой код спецификации в events_helper_spec.rb:

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe EventsHelper do

  #Delete this example and add some real ones or delete this file
  it "should be included in the object returned by #helper" do
    included_modules = (class << helper; self; end).send :included_modules
    included_modules.should include(EventsHelper)
  end

  it "should return the 'refine image search' button if a search has been run" do

  # mock up params hash
    params = {}
    params[:filter] = true

   # create an instance of the class that should include EventsHelper by default, as the first test has verified (I think)
    @event = Event.new

  # call method to check output
    @event.filter_check_button_path.should be('/images/buttons/bt_search_for_events.gif')
  end

end

Когда я просмотрел документы здесь - http://rspec.info/rails/writing/views.html, я озадачен тем, откуда берется объект «шаблон».

Я также пытался искать здесь, что, как я думал, укажет мне правильное направление, но, увы, без костей. http://jakescruggs.blogspot.com/2007/03/mockingstubbing-partials-and-helper.html

Что я здесь делаю неправильно?

Спасибо,

Крис


person Chris Adams    schedule 17.09.2009    source источник


Ответы (3)


Вы ничего не делаете в этой спецификации, просто устанавливаете заглушку, поэтому она пройдет, но ничего не проверял.

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe EventsHelper do
 it "should return the 'refine image search' button if a search has been run" do
  # mock up params hash
  params = {:filter => true}

  helper.stub!(:params).and_return(params)
  helper.filter_check_button_path.should eql('/images/buttons/bt_search_for_events.gif')
 end
end
person Damian    schedule 02.10.2009

Я запускаю тест без spec_helper (Ruby 1.9)

require_relative '../../app/helpers/users_helper'

describe 'UsersHelper' do 
  include UsersHelper

  ...
end
person James    schedule 13.05.2012

Ah,

Я задал этот вопрос в списке рассылки rspec, и одна добрая душа (спасибо, Скотт!) объяснила мне, что для этого есть удобный вспомогательный объект, который вы должны использовать вместо этого, например:

В Rails есть собственная вспомогательная функция params = {:filter => true} helper.stub!(:params).and_return(params)

Теперь я обновил код следующим образом:

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe EventsHelper do

  #Delete this example and add some real ones or delete this file
  it "should be included in the object returned by #helper" do
    included_modules = (class << helper; self; end).send :included_modules
    included_modules.should include(EventsHelper)
  end

  it "should return the 'refine image search' button if a search has been run" do

  # mock up params hash
    params = {}
    params[:filter] = true

    helper.stub!(:filter_check_button_path).and_return('/images/buttons/bt_search_for_events.gif')
  end

end

И это работает. Ура!

person Chris Adams    schedule 18.09.2009
comment
Я не думаю, что вы проводите какой-либо тест во втором примере. Вы просто создаете хеш с именем params, добавляете значение :filter, а затем добавляете метод-заглушку в свой помощник. Добавление метода-заглушки похоже на переопределение поведения исходного метода, но он ничего не проверяет, поэтому вы не получаете никаких ошибок. - person tothemario; 09.09.2011