ruby – rspec`它的语法与动态条件

我真的很喜欢使用上下文,主题和它与rspec真正清理我的测试代码。典型例子:

context "as a user" do
  subject{ Factory :user }

  its(:name){ should == "Bob" }
end

我无法想像的是,我如何使这个条件变得动态(即基于其他对象)。它似乎实例eval在块内的属性,所以我失去访问它周围的一切。我喜欢做一些像:

its(:name){ should == subject.contact.name }

但我看不到任何方式实现这一点。有没有人知道是否有一些方法通过这个实例eval来访问原始对象?或者如果还有其他方法,我可以使用我正在检查的属性实例范围之外的方法?

附加信息

看来,它的块内的主题被改变为实际属性(在这种情况下为名称)

有趣的是,我可以访问我的任何方式,但是再次,我无法访问我的原始主题。

你几乎回答了自己,在设置主题之前先使用let作业。那么你可以随处参考:

context "as a user" do
  let(:user) { Factory(:user) }
  subject { user }
  its(:name) { should == user.contact.name }
end

我是一个上下文,主题,它的爱人也是!

翻译自:https://stackoverflow.com/questions/7798527/rspec-its-syntax-with-dynamic-conditions

转载注明原文:ruby – rspec`它的语法与动态条件