有多种编写测试的方法和不同的首选语法,所以这是一个相当固执的答案。
按照你的风格,它看起来更像这样:
describe "#mark_as_dismissed" do
subject { create(:notification) }
before { subject.mark_as_dissmissed }
its(:has_been_read) { should be_true }
end
我的会更像这样:
describe "#mark_as_dismissed" do
let(:notification) { create(:notification) }
it "marks the notification as read" do
notification.mark_as_dissmissed
notification.has_been_read.should be_true
end
end
语法糖:Rspec 允许返回布尔值的方法使用特殊语法。我必须对其进行测试,我不确定它在这种情况下是否有效,但也许您可以执行以下操作:
# for the first alternative
it { should have_been_read }
# for the second alternative
it "marks the notification as read" do
notification.mark_as_dissmissed
notification.should have_been_read
end
加分点
要删除 db 依赖项,您可以只“构建”通知而不是使用“创建”(将模型保留在数据库中)。如果#mark_as_dismissed 方法不需要数据库(可以进行非持久更新),那么测试应该仍然有效。
build(:notification) # 而不是 create(:notification)