RSpec と Draper で装飾されたオブジェクトの等価マッチャーに問題があります。
何が起こっているかを示す仕様:
context 'how to use the right equality matcher' do
let(:page) { build(:page) }
let(:decorated_page) { page.decorate }
it "should pass, but doesn't" do
expect(decorated_page).to_not eq page
end
it 'proves the classes are different' do
expect(decorated_page).to be_a PageDecorator
expect(page).to be_a Page
expect(decorated_page.class).to_not eq page.class
end
it 'has a work around' do
expect(decorated_page).to be_decorated_with PageDecorator
expect(page).to_not be_decorated_with PageDecorator
end
end
RSpec にはいくつかの異なる等価チェッカーがあることは知っていますが、それeq
は「最も弱い」ものですが、同じクラスを持たないことは問題になると思いました。
ご覧のとおり、Draper の matchers のおかげで、このケースの回避策があります。しかし、そのテストが失敗するためには、何かが欠けているに違いないと感じています。
質問:
should pass, but doesn't
テストに合格するには、どの等価マッチャーを使用すればよいですか?