テストを書く方法は複数あり、推奨される構文も異なるため、これは非常に独断的な回答です。
あなたのスタイルに従うと、次のようになります。
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
syntatic sugar : 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 の依存関係を削除するには、'create' を使用する代わりに通知を 'build' するだけです (モデルをデータベースに永続化します)。#mark_as_dismissed メソッドがデータベースを必要としない場合 (非永続的な更新を実行できる場合)、テストは引き続き機能するはずです。
build(:notification) # create(:notification) の代わりに