Rspec:隐含定义的主题

时间:2012-06-11 22:17:29

标签: ruby-on-rails rspec

Rspec implicitly defined subject documentation说:

  

虽然以下示例演示了如何将主题用作a   面向用户的概念,我们建议您保留它以支持   隐藏其使用的自定义匹配器和/或扩展库   实例

这是否意味着,我应该试着永远不要称之为“主题”。直接在我的规格?如果是,我应该使用什么作为主题对象?

1 个答案:

答案 0 :(得分:3)

比较以下两个例子:

describe "User" do
  subject { User.new(age: 42) }
  specify { subject.age.should == 42 }
  its(:age) { should == 42 }
end

describe "User" do
  let(:user) { User.new(age: 42) }
  specify { user.age.should == 42 }
end

<强>更新

Rspec中有一个很酷的功能 - 名为subject:

以下是David Chelimsky的example

describe CheckingAccount, "with a non-zero starting balance" do
  subject(:account) { CheckingAccount.new(Money.new(50, :USD)) }
  it { should_not be_overdrawn }
  it "has a balance equal to the starting balance" do
    account.balance.should eq(Money.new(50, :USD))
  end
end

当您使用user代替subject时,它更具可读性(恕我直言)。 但subject允许您使用不错的扩展程序its(:age)