RSpec: хочу иметь много тестов для метода одного выстрела, включая приспособления - PullRequest
1 голос
/ 20 октября 2010

Я работаю над приложением Rails.Я хочу проверить с помощью rspec мой метод "начать!"Резервное копирование моей модели.

Итак, здесь спецификации (все тоже методы):

  • Backup должен копировать файлы в папку / резервные копии
  • Backup должен проверить сумму md5
  • Backup должен удалить исходные файлы

Для моих тестов я создаю поддельные файлы на основе приборов:

MyFile.all.each{|r| system("touch #{r.path}") }

Затем, @backup.start! следует удалить некоторые из этих файлов (не все).

Проблема в том, что я не хочу перезапускать все операции для каждого теста!Я мог бы написать один большой тест, включив в него все требования, но он был бы уродливым ...

Шаблон before(:all), событие в контекстах запускается раньше всех контекстов, а приборы недоступны, дляконструктивные причины.

Есть предложения?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 20 октября 2010

Благодаря http://thefrontiergroup.com.au/blog/2010/01/using-rspec-example-groups-for-common-functionality/,

Я нашел решение:

# /spec/support/backuped_files_examples.rb
shared_examples_for "backed up up files" do
  before(:all) do
    # Fixtures are unreachable for now, 
    # but test db can be use and is filled with fixtures
    MyFile.all.each{|r| system("touch #{r.path}") }
    @backup = Backup.create(...) 
    @backup.start!
  end
end

# /spec/models/backup_spec.rb
describe Backup do  
  context " (when #start! have been called)" do

    before(:each) do
      @files_to_backup = MyFile.all(:conditions => (...))
    end

    it_should_behave_like "backed up up files"
    it "should have deleted wanted files" do
      @files_to_backup.each do |file|
        File.exists(file.path).should be_false
      end
    end
  end
end
0 голосов
/ 20 октября 2010

Если каждый метод является отдельным, вы можете смоделировать все, кроме одного, и каждый раз менять один.

Вы можете выбрать и ограничить методом, который хотите проверить.

...