上下文范围中的Rspec字段

时间:2012-09-23 10:32:40

标签: ruby rspec ruby-1.9

我真的不知道如何标题,但我的问题如下:

shared_examples "something" do 
  context "for something" do 
    fields.each do |field| 
      it "should have #{field} field" do 
        #Check something 
      end
    end
  end
end

describe Clazz do
  it_behaves_like "something" do
    let(:fields) {%w{something something2}}
  end
end

由于变量是在fields.each范围内引入的,而不是it,因此context部分的执行过程会爆炸。

所以我的问题是如何将it_behaves_like中的变量引入上下文范围?或者我应该使用别的东西。

3 个答案:

答案 0 :(得分:2)

不了解shared_examples,但如果使用shared_examples_for,则可以将参数传递给块,如下所示:

shared_examples_for "something" do |fields|
  context "for something" do
    fields.each do |field| 
      it "should have #{field} field" do 
        #Check something 
      end
    end
  end
end

describe Clazz do
  it_behaves_like "something", %w{something something2}
end

答案 1 :(得分:2)

shared_examples已经创建了一个新的上下文,所以我认为最干净的方式就像shioyama的例子没有额外的上下文:

shared_examples_for "something" do |fields|
  fields.each do |field| 
    it "should have #{field} field" do 
      # specify something
    end
  end
end

describe Clazz do
  it_behaves_like "something", %w{something something2}
end

答案 2 :(得分:0)

在我知道之前,我们会在每个it块之前评估,而不是contextdescribe

describe "something" do 
  let(:fields) { %w{something something2} }

  it "should have all fields" do 
    fields.each do |field| 
    end
  end
end