2011-12-06 9 views
1

RSpecを使用してtddを学習しようとしています。私はオンラインで見つけたチートシートからこの例を取り上げ、実装方法について少し混乱しています。 MovieList.newを追加するのは自動ですが、ActiveRecordですでに処理されている場合は、どのようにパラメータを追加するのですか?そして、 'forward'メソッドも追加します。レールモデルのコンストラクタでパラメータを使用する方法

describe "forward" do 
    it "should jump to a next movie" do 
    next_movie = MovieList.new(2).forward 
    next_movie.track_number.should == 2 
    end 
end 
+3

ここには何を実装しようとしていますか?あなたはあなたの問題をとてもうまく説明していません。 – tadman

答えて

4

これがMovieListクラスのテストの場合は、MovieListというクラスを作成します。 2.

そして、そのクラスのコンストラクタには、必ずそれがtrack_numberと呼ばれるパラメータにとり作る、あなたのテストでは、あなたがそれを行うために必要なものは何でもするために前方と呼ばれるメソッドを作成しますか? http://rspec.info/

これは曖昧に聞こえるかもしれないが、そう質問されました:

は、ここで私はこれで行くよどこの良い例です。


EDIT: これは、新しいMovieListクラスを作成し、track_numberというパラメータでそれを初期化する方法の目安です。

def MovieList 
    attr_accessor :track_number 

    def initialize(track_number) 
    @track_number = track_number 
    end 

    # You can define all your class methods below, you 
    # can start with forward. 

    def forward 
    # do something... 
    end 

end 
+0

私はActiveRecordが既にモデルのコンストラクタを持っていると思っています。 – basheps

+0

私は、上の編集で追加したようなことをすることができます。 私はActiveRecordがあなたの心をこのように読めると信じていません:) しかし、getterとsetterを作成するので、attr_accessorはあなたの人生を楽にします。 希望に役立ちます。 – DemitryT

+0

おかげで、def initialize(track_number、attributes = {})と言う必要があります。 super(attributes)... end – basheps

1
movie = Movie.new(:track_number => 2) 
movie.forward 

私はあなたが前方に呼び出し、その後2にtrack_numberを初期化しているように見えるので、あなたの例では何前方を確認していません。私はtrack_numberをインクリメントすることを期待していましたが、あなたのテストはそれがまだ2かどうかをチェックしています。

ハッシュとして渡す限り、パラメータを取るようにコンストラクタを変更する必要はないと思います(私の例では、単一のメンバーハッシュが暗示されています)。この最後の主張?

関連する問題