2014-05-11 47 views
0

至於現在,我有這樣的事情在我的RSpec的測試,它工作正常:指望改變許多數組元素

expect{ 
... 
}.to change(@foo_array.first, :bar).from(3.14).to(69) 

但如何期望的變化不僅爲.first但對於每一個在@foo_array

注:重要的是不執行命令...多次

+0

嘗試使用'變化{@ foo_array.first.bar}'(用大括號)而不是改變(@ foo_array.first,:bar)'。 – ole

+0

這不是重點,測試我工作正常,但只爲'.first'數組元素,我希望測試所有元素。我正在閱讀有關'collect','inject'和'map'的信息,想知道如何使用其中的一個,但我甚至不確定這是否是一種好方法。 – pawel7318

回答

0

如何:

count = @foo_array.count 
expect{ 
... 
}.to change(@foo_array.map(&:bar)).from([3.14]*count).to([69]*count) 
+0

我得到了'nil不是符號'的錯誤,但是從什麼不清楚..我不明白'.map'到'&'很多,但我覺得這可能是一個問題。我可以提供更多關於我的確切情況的詳細信息。 – pawel7318

+0

也許我會用你的建議得到一些東西:'expect {...}。{@foo_array.map {| foo |從([3.14] * count)。到([69] * count)'foo.bar}}。我需要玩一下,以確保 – pawel7318

+0

它的作品(我的版本)。我接受了答案,因爲這將我推向了最終的解決方案,並且我想稍微編輯一下,因爲可能用'&:bar'構建它的方式應該可行,但我犯了一個錯誤。請看看並評論,因爲我不確定'&:bar'應該如何工作。 – pawel7318