1

Betterspecsは、次のようなものを使用することを提案しています。

subject { assigns('message') }
it { should match /it was born in Billville/ }

良い習慣として。しかし、rspec を doc 形式 ( rspec -f doc)で実行したい場合は、次のメッセージが表示されます。

When you call a matcher in an example without a String, like this:    
  specify { object.should matcher }    
or this:    
  it { should matcher }    
RSpec expects the matcher to have a #description method. You should either
add a String to the example this matcher is being used in, or give it a
description method. Then you won't have to suffer this lengthy warning again.

したがって、この

it "some desc" do 
  should match /it was born in Billville/ 
end

その迷惑なメッセージは表示されませんが、醜いようです。

rspec の規則とコードをきれいに保ち、きれいな出力 (のように-f doc) を保持する方法についてのアイデアはありますか?

rspec v.2.13.0

4

2 に答える 2

5

RSpecのメンテナとして、betterspecs.orgにリストされているものの多くは私が同意しません。私は何ヶ月も前にプロジェクトのgithubの問題についてそのようにコメントしましたが、残念ながら、私の懸念は何も解決されていないと思います:(。

とにかく、ドキュメントの出力が必要なものと一致する場合は、ワンライナー構文を使用するのが適切だと思いますが、多くの場合、一致しません。通常、ワンライナー構文のdoc出力は過度に具体的です。たとえば、それがshould eq "dfgh"一般的に真の動作ではない場合でも、のようなdoc文字列で返されます。たとえばreturns a string without vowels removed、より適切で、より一般的には真の動作の説明です。

したがって、必要な出力が生成されない限り、ワンライナー構文を使用しないことをお勧めします。betterspecs.orgが推奨しているという理由だけで使用しないでください。私の意見では、その推奨事項の多くは悪い推奨事項です。

于 2013-03-01T20:11:29.390 に答える
1

個人的には、これに関して BetterSpecs に同意します。次のことの何がわかりにくいですか。

subject { assigns('message') }
it { should match /it was born in Billville/ }

@Myron Marstonが意見を述べているように、十分な出力が得られない場合は、コンテキストを使用することをお勧めします(そして私はいつもそうしています)。

context "When given a message" do
  subject { my_func arg }
  context "With vowels" do
    let(:arg) { "dafegih" }
    let(:expected){ "dfgh" }
    it { should == expected }
  end
  context "Without vowels" do #…

素敵な出力が得られ、コードと同様に読みやすく、簡潔で、さまざまな入力について考えることを奨励し、共有された例とコンテキストを介して再利用し、より広い範囲の入力にわたるテストを奨励します. 文字列 + ブロック ベースの仕様書の書き方を使用すると、複数の仕様書を 1 つのテストに詰め込むことができます。

it "some desc" do
  should_not be_nil
  should match /it was born in Billville/
end

それが失敗した場合、それは nil だったからですか、それとも一致しなかったからですか? それは再利用を促進しますか?これははるかに優れています、IMO:

subject { assigns('message') }
it{ should_not be_nil }
it { should match /it was born in Billville/ }

ライブラリの作成者や保守担当者がライブラリを適切に使用するように意図しているのは素晴らしいことですが、彼らが私たちをしつこくしたり、これらのことを強制したりできると考えていることに少しうんざりしています。RSpec は、Bundler と Rails を含むリストに自分自身を追加しました。このリストには、「本当に便利で、本当に感謝していますが、ビジネスから離れるべきプロジェクト」という見出しが付けられています。

于 2013-10-04T02:16:47.757 に答える