RSPEC,DRY测试有100个用例

时间:2011-03-20 19:47:21

标签: ruby-on-rails ruby-on-rails-3 rspec rspec2

在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,允许我以某种方式在一个块中使用所有逻辑?然后创建100个“xxxxx”,并传递一个变量作为示例文本?

由于

2 个答案:

答案 0 :(得分:4)

您可以将it测试块放在循环中,并运行您想要的所有时间的集合(在下面的示例中,这些项目位于search_items集合中)< / p>

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

您可能必须使用file_name的完整路径,但这应该可以帮到您。

答案 1 :(得分:1)

不确定这是否是您正在寻找的,但如何:

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

当然,您可能会选择除数组之外的其他内容来存储测试字符串,但这应该可以让您入门。