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
?