2
私は宝石を使用しており、40以上の追加のrspecテストを追加したいと考えています。この宝石には一連の仕様が付属していますが、それらはあまり乾燥しているわけではありません。追加したい40種類以上のテストのそれぞれに、10〜12行のコードが必要です(それぞれ非常に似ています)。このrspecテストをどのようにDRYするのですか?
テストのサンプルは以下ですが、私はより多くのコードを保持するための要点を作成しました。ここに多くを貼り付けるのは実用的ではないようだ。ここで
が要点だ:私は何をしたいかhttps://gist.github.com/2400225
は理にかなっているようだDRY単一のソースファイルでこれらのテストの40-45を持つことです。
shared_examples_for "Firefox browser" do
it "should return 'Firefox' as its browser" do
@useragent.browser.should == "Firefox"
end
it "should return :strong as its security" do
@useragent.security.should == :strong
end
it { @useragent.should_not be_webkit }
end
# (repeating code would start here. I want 40-50 of these blocks.)
describe 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b8) Gecko/20100101 Firefox/4.0b8' do
before do
@useragent = UserAgent.parse('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b8) Gecko/20100101 Firefox/4.0b8')
end
it_should_behave_like "Firefox browser"
it "should return '4.0b8' as its version" do
@useragent.version.should == "4.0b8"
end
it "should return '20100101' as its gecko version" do
@useragent.gecko.version.should == "20100101"
end
it "should return 'Macintosh' as its platform" do
@useragent.platform.should == "Macintosh"
end
it "should return 'Intel Mac OS X 10.6' as its os" do
@useragent.os.should == "Intel Mac OS X 10.6"
end
it "should return nil as its localization" do
@useragent.localization.should be_nil
end
it { @useragent.should_not be_mobile }
end
ブラウザの詳細をハッシュに入れて、フィールドの説明が値の隣にくるようにします。 –
https://github.com/croakyで行われたhttps://gist.github.com/2401393同様のクリーンアップ版 –
この質問はRSpec 2の古い 'should'構文を使用していることに注意してください。 RSpec 3を実行していて、そこからコピーしたい場合は、新しい 'expect'構文を使用してください。 – williamcodes