使用RSpec构建CSV数据驱动测试的基本简单方法是什么?

时间:2015-07-13 03:41:02

标签: rspec rspec2 rspec3

我是Ruby和RSpec的新手,进行了一些研究,看到有几种方法可以从在线帖子中进行数据驱动的枚举测试,但是他们并没有像完整的教程那样详细介绍。所以在我再次详细阅读这些在线文章之前,我想先在这里问一下。

这是我基于使用RSpec的标准简单方法的设置(定义描述& it块,而不是导入RSpec的部分仅用于期望)。然后我尝试添加数据驱动的能力:

require 'rspec'
require 'csv'

describe "test suite name" do
  before :all do
    #this CSV mapping method found online...
    @device_client = CSV.read path
    @descriptor = @device_client.shift
    @descriptor = @descriptor.map { |key| key.to_sym }
    @device_client.map { |client| Hash[ @descriptor.zip(client) ] }
  end

  @device_client.each do |client|
    describe "#{client[:test_scenario]}" do
      if "match some CSV field value"
        it "should run this kind of test" do
          #additional code as needed
          expect(some_actual).to eql(some_expected)
        end
      end

      if "match some other CSV field value"
        it "should run that kind of test" do
          #additional code as needed
          expect(some_actual).to eql(some_expected)
        end
      end

      it "some other test common to all CSV rows" do
        #stuff
      end
    end
  end

end

我在这里注意到@device_client是nil,因为它现在是结构化的(使用“p @device_client”语句调试以转储内容)。为了让它具有价值,我必须将哈希包含在它的范围内的块中(我通常在另一个描述块内部,但是假设我可以跳过额外的描述)。

我如何重组测试以“读取”相同的(对测试的读者)并按照我打算的方式运行?如果重组意味着我不能使用标准RSpec格式并且必须以不同方式要求RSpec组件(在线帖子似乎不遵循简单/基本RSpec格式),那就没问题了。

我认为我的代码解释起来相当直接。如果没有,目的是使用CSV输入动态构建测试。每个CSV行都是具有多个测试的场景 - 根据CSV字段值,1个测试不同,因此ifs,其余测试对所有场景都是通用的。我们为文件中的多个CSV方案行重复此设置。在我们处理CSV数据之前,所有块都是全局设置。

在重组中,理想情况下我想保留描述&它是文本描述块(或者它们的一些等价物),因此在测试结果中它们会显示描述测试,而不仅仅是一堆预期。

0 个答案:

没有答案