2013-03-01 29 views
1

Betterspecs飼養rspec的約定,建議使用類似:與--format DOC

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

是很好的做法。但如果我要運行DOC格式文件(rspec -f doc)rspec的我收到:

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

+0

嘗試:'subject(:message){assigns('message')}'在最新的rspec vsrsions中提供 – apneadiving 2013-03-01 16:51:38

回答

4

作爲RSpec的維護者,有上betterspecs.org上市的很多事情與我不同意。幾個月前,我在這個項目的github問題上評論過,但不幸的是,我不認爲我的任何擔心都已經解決:(無論如何,我認爲單線程語法沒問題在文檔輸出與你想要的相匹配時使用,但通常情況下不會,通常,單行語法的文檔輸出過於具體,例如它會以文檔字符串的形式返回,如should eq "dfgh",即使這不是一個真正的行爲 - - 類似returns a string without vowels removed是對行爲更好,更一般的真實描述

所以我的建議是不使用單線程語法,除非它產生你想要的輸出,不要僅僅因爲betterspecs.org就使用它。推薦它,它的許多建議都是不好的建議在我看來。

+0

謝謝。您能否提供任何有建議或最佳實踐的資料來源? – ted 2013-03-02 18:13:10

+2

https://www.destroyallsoftware.com/太棒了。它花錢,但我強烈推薦它。我還通過電子郵件向betterspecs.org維護人員詢問他是否願意更新內容以解決我的疑慮。 – 2013-03-02 18:14:48

+0

再次感謝你(: – ted 2013-03-02 18:20:32

1

就我個人而言,我同意BetterSpecs對此。關於以下內容很難理解什麼?

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

如果像@Myron馬斯頓冠癭,它不會產生足夠好的輸出,那麼我會使用上下文提示(我總是這樣),例如

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 #… 

你會得到可愛的輸出,而且還讀以及代碼,很簡潔,並鼓勵你去思考不同的輸入,並通過共享的例子,上下文的,然後鼓勵在更寬的測試重用輸入範圍。使用基於字符串+塊的編寫規範的方式鼓勵將幾個規範塞進一個測試中,例如,

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

如果失敗是因爲它是零,還是因爲它不匹配?這會鼓勵重用嗎?這是好得多,IMO:

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

這是很好的作家和庫的維護者打算讓我們使用庫很好,但我越來越有點累了他們的思想,他們可以嘮叨我們,或迫使我們做這些事情。 RSpec已將自己添加到名單中,其中包括Bundler和Rails領導的「項目,這些項目非常有用,我非常感謝,但應該從我的業務中剔除」。