2013-04-17 2 views
1

Я новичок в рубин/рельсы/RSpec и т.д.RSpec - Как создать вспомогательный метод доступным для тестов, которые будут автоматически вставлять «он» тестирует

Используя RSpec 2.13.1, я хочу, чтобы создать модуль с метод, который можно вызывать из моих тестов, что приводит к последующим вызовам метода «it» RSpec :: Core :: ExampleGroup.

Мой модуль:

require 'spec_helper' 

module TestHelper 
    def invalid_without(symbols) 
    symbols = symbols.is_a?(Array) ? symbols : [symbols] 
    symbols.each do |symbol| 
     it "should not be valid without #{symbol.to_s.humanize}" do 
     # Gonna nullify the subject's 'symbol' attribute here 
     # and expect to have error on it 
     end 
    end 
    end 
end 

Код выше был добавлен:

spec/support/test_helper.rb 

и в моем spec_helper.rb, в блоке RSpec.configure, я добавил следующее:

config.include TestHelper 

Теперь, в тесте, я делаю следующее:

describe Foo 
    context "when invalid" do 
     invalid_without [:name, :surname] 
    end 
end 

Запуск этого, я получаю:

undefined method `invalid_without' for #<Class:0x007fdaf1821030> (NoMethodError) 

Любая помощь приветствуется ..

ответ

3

Использование shared example group.

shared_examples_for "a valid array" do |symbols| 
    symbols = symbols.is_a?(Array) ? symbols : [symbols] 
    symbols.each do |symbol| 
    it "should not be valid without #{symbol.to_s.humanize}" do 
     # Gonna nullify the subject's 'symbol' attribute here 
     # and expect to have error on it 
    end 
    end 
end 

describe Foo do 
    it_should_behave_like "a valid array", [:name, :surname] 
end 
+0

Я хотел создать совершенно новый метод для этого, но ваше предложение отлично работает. Не могу проголосовать за вас, так как я здесь новый член ... Спасибо за ваше время. –

+0

Узнаю, как и я это сделаю :) –

+0

sweet! рад помочь! – shime

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