RSPEC, СУХОЙ тест с сотнями вариантов использования - PullRequest
1 голос
/ 20 марта 2011

в rspec, у меня есть спецификация, которая выглядит примерно так:

require 'spec_helper'

describe IncomingMailsController do

  include Devise::TestHelpers

  it "should find the correct text in the sample" do
  sample_text = '100s of these'
  target_text = 'find me'
   .... ALL Kinds of stuff to process (30+ lines)
   thread.content.should == 'find me'
  end

end

Есть ли способ с rspec, чтобы я мог как-то использовать всю эту логику в одном блоке? И затем создайте сотню из этого «xxxxx» do, и передайте, что переменная является образцом текста?

Спасибо

Ответы [ 2 ]

4 голосов
/ 20 марта 2011

Вы можете поместить тестовые блоки it в цикл и просмотреть коллекцию всех раз, для которых вы хотите каждый (для примера ниже эти элементы находятся в коллекции search_items)

require 'spec_helper'

describe IncomingMailsController do

  include Devise::TestHelpers

  search_items.each do |item|
    it "should find the correct text (#{item}) in the sample" do
      sample_text = '100s of these'
      target_text = item
      .... ALL Kinds of stuff to process (30+ lines)
      thread.content.should == 'find me'
    end
  end

end

ОБНОВЛЕНИЕ

Я заметил в комментарии к другому ответу в этой теме, что у вас есть каталог с более чем 100 файлами образцов, вы можете получить список имен файлов, используя Dir # Glob .Затем вы можете использовать это в цикле для генерации it тестовых случаев.

ОБНОВЛЕНИЕ 2

  Dir.glob('/path/to/files/*.txt').each do |file_name|
    it "should find the correct text in the sample #{file_name}" do
      file_content = File.open(file_name, "rb")
      sample_text = '100s of these'
      target_text = 'fine me'
      .... ALL Kinds of stuff to process (30+ lines)
      thread.content.should == 'find me'
    end
  end

Возможно, вам придется поиграть с полным путемимя_файла, но это поможет вам.

1 голос
/ 20 марта 2011

Не уверен, что это то, что вы ищете, но как насчет:

['xxxxxx', 'yyyyyyy', 'zzzzzzzz'].each do |thing|
  it "finds #{thing} in the sample do
    # and so on...
  end
end

Естественно, вы можете выбрать что-то другое, кроме массива для хранения ваших тестовых строк, но это должно васначал.

...