Ruby on rails Rspec:隐式定义的主题

Ruby on rails Rspec:隐式定义的主题,ruby-on-rails,rspec,Ruby On Rails,Rspec,说: 下面的示例演示了如何将主题用作 面向用户的概念,我们建议您保留它以支持 自定义匹配器和/或扩展库,这些库对 例子 这是否意味着,我应该尽量不直接在我的说明书中称之为“主题”?如果是,我应该用什么来代替主语和宾语 比较这两个例子: describe "User" do subject { User.new(age: 42) } specify { subject.age.should == 42 } its(:age) { should == 42 } end describe

说:

下面的示例演示了如何将主题用作 面向用户的概念,我们建议您保留它以支持 自定义匹配器和/或扩展库,这些库对 例子


这是否意味着,我应该尽量不直接在我的说明书中称之为“主题”?如果是,我应该用什么来代替主语和宾语

比较这两个例子:

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命名主题中有一个很酷的功能:

以下是David Chelimsky的评论:

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
时,它更具可读性(IMHO)。
但是
subject
允许您使用漂亮的扩展
its(:age)

您现在可以在这种情况下使用
subject(:user)
,这是两种情况的最佳选择。何时使用
let
以及何时使用
subject