2009-09-17 4 views
3

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

Вот код 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

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

Спасибо,

Chris

ответ

10

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

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 
-2

Ах,

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

Rails имеет свою собственную вспомогательную функцию Params = {: фильтр => True} helper.stub! (: Титулы) .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 

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

+1

Я не думаю, что вы делаете любые испытания во втором примере. Вы просто создаете хэш, называемый параметрами, добавляете значение фильтра: а затем добавляете метод заглушки вашему помощнику. Добавить метод заглушки похож на переопределение исходного поведения метода, но он ничего не тестирует, поэтому вы не получаете никаких ошибок. – tothemario

1

Я бегу мое испытание без spec_helper (Ruby 1.9)

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

describe 'UsersHelper' do 
    include UsersHelper 

    ... 
end 
Смежные вопросы