3
Rspec implicitly defined subject documentation說:Rspec的:隱含定義主題
雖然下面的例子演示,我們建議您保留它支持的 的匹配器主體如何被用作 面向用戶的概念和/或從 示例中隱藏其使用的擴展庫。
這是不是說,我應該儘量不要叫「主題」。直接在我的規格?如果是的話,我應該使用什麼作爲主題對象?
Rspec implicitly defined subject documentation說:Rspec的:隱含定義主題
雖然下面的例子演示,我們建議您保留它支持的 的匹配器主體如何被用作 面向用戶的概念和/或從 示例中隱藏其使用的擴展庫。
這是不是說,我應該儘量不要叫「主題」。直接在我的規格?如果是的話,我應該使用什麼作爲主題對象?
比較這2個例子:
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
UPDATE
有在Rspec的一個很酷的功能 - 名爲主題:
這裏是從大衛赫利姆斯基的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)
。
現在,您可以在這種情況下爲了兩全其美而做'subject(:user)'。 –
謝謝,我更新了答案 – cutalion
何時使用'let'和何時使用'subject'? – Lokesh