在Rspec中为程序示例分配变量

时间:2013-03-06 02:49:45

标签: ruby selenium rspec

我正在使用Rspec和Selenium设置一些自动化测试,我遇到了一些尝试以编程方式创建示例的问题。

我有一个包含多个项目的数组,需要根据数据的变化多次测试。

数组:

def get_array
  @stuff = { thing1, thing2, thing3 }
end

测试的简化版本:

describe "My tests" do
  context "First round" do
    before { #do some stuff }

    @my_array = get_array
    @my_array.each do |k|
      it "should pass the test" do
        k.should pass_the_test
      end
    end
  end

  context "Second round" do
    before { #do some other stuff }

    @my_array = get_array
    @my_array.each do |k|
      it "should pass the test" do
        k.should pass_the_test
      end
    end
  end
end

在这个例子中并不是太糟糕,但每次都要调用@my_array = get_array绝对不是DRY。随着我添加更多测试和复杂性,这很快就会失控,所以我想知道我失踪的更简单/更好的方法是什么。

我尝试过共享的上下文和我能找到的任何其他内容,但似乎没有任何效果。

1 个答案:

答案 0 :(得分:1)

在阅读你的评论之后,@ benny-bates,我意识到问题不是前一块,而只是在调用测试之前初始化变量。不幸的是,将实例变量转换为常量似乎是最好的方法。

describe "My tests" do

  STUFF = {thing1, thing2, thing3}

  context "First round" do
    before { #do some stuff }

    STUFF.each do |k|
      it "should pass the test" do
        k.should pass_the_test
      end
    end
  end

  context "Second round" do
    before { #do some other stuff }

    STUFF.each do |k|
      it "should pass the test" do
        k.should pass_the_test
      end
    end
  end
end