単純なクラスメソッドBuy.get_days(string)
を作成し、さまざまなテキスト文字列入力でテストしようとしています。しかし、それは非常に冗長だと感じています。
subject
に相当するものはありますか?これは、さまざまなパラメーターを渡して、結果を確認するだけです。it
で不要な説明を回避する方法はありますか?ありがとう
describe Buy do
describe '.get_days' do
it 'should get days' do
Buy.get_days('Includes a 1-weeknight stay for up to 4 people')
.should == 1
end
it 'should get days' do
Buy.get_days('Includes a 1-night stay in a King Studio Room with stone fireplace')
.should == 1
end
it 'should get days' do
Buy.get_days('Includes 4 nights/5 days at the Finisterra Hotel for up to two adults and two children (staying in the same room)')
.should == 4
end
end
end
どうやら_described_class
_メソッドがあります。
https://www.relishapp.com/rspec/rspec-core/docs/metadata/written-class
読みやすさを低下させる別の_subject.class
_メソッド呼び出しを導入しないため、_.
_よりもクリーンだと思います。
_described_class
_または_subject.class
_のいずれかを使用すると、すべての例でクラスを明示的に言及するよりもDRY=になる可能性があります。名前は明示的にはつまらないものであり、保守性部門で完全に勝利したにもかかわらず、読みやすさが低下すると思います。
ベストプラクティスに関して疑問が生じます。
.expect()
メソッドの内外で可能な限りいつでも、またはexpect()
メソッド内でのみ、described_classを使用する必要がありますか?
メソッドを呼び出すためのsubject
に相当するものはないため、it
を使用してここに進むことができます。提示されたコードで私が目にする問題は、それが実際に説明していないということですwhatあなたがテストしている。私はもっと何かを書くでしょう:
describe Buy do
describe '.get_days' do
it 'should detect hyphenated weeknights' do
Buy.get_days('Includes a 1-weeknight stay for up to 4 people').should == 1
end
it 'should detect hyphenated nights' do
Buy.get_days('Includes a 1-night stay in a King Studio Room with stone fireplace').should == 1
end
it 'should detect first number' do
Buy.get_days('Includes 4 nights/5 days at the Finisterra Hotel for up to two adults and two children (staying in the same room)').should == 4
end
end
end
私はあなたがこれから何をしているのかについて仮定を立てていますが、うまくいけばアイデアは明確です。これは、テストが失敗したときに、はるかに役立つエラー出力にもつながります。お役に立てれば!
これは古い質問かもしれませんが、いつでもsubject.class
入手方法:
describe Buy do
describe '.get_days' do
it { expect(subject.class.get_days('Includes a 1-weeknight stay for up to 4 people')).to eq 1 }
end
end
subject
/it
を使用する代わりに、before
/specify
を使用することもできます。
describe '#destroy' do
context 'with children' do
before { @parent = FactoryGirl.create(:parent, children: FactoryGirl.create_list(:child, 2) }
specify { @parent.destroy.should be_false }
end
end
これにより、RSpecの-fd
出力形式で適切な説明が生成されます。
#destroy
with children
should be false