2012-02-08 18 views
1

Ruby 1.9.3-p0でRails 3.2.1にアップグレードしましたが、私はMachinist 2.0を使用しています。大きなプロジェクトを更新する前に、すべてのテストが合格しました。私はRSpecのテストで 『聞かせて』コール内の青写真を作成し、前に行うブロックでそれを参照するとき、私は "mが持つ問題は、これが動作するために使用rails 3.2とmachinistの問題

let (:new_post) {Post.make!} 

    before do 
    Post.stub!(:new).and_return(new_post) 
    end 

。で、今私が取得します次のエラー:周りに今私の仕事のために

require 'machinist/active_record' 
Post.blueprint do 
    title {"Post"} 
    body {"hello world"} 
end 

前に行うブロック内でインスタンス変数を使用して作成することですが、聞かせて使用するとよいでしょう。ここ

1) PostsController GET index assigns all posts as @posts 
    Failure/Error: let (:new_post) {Post.make!} 
    NoMethodError: 
     undefined method `title=' for nil:NilClass 
    # ./spec/support/blueprints.rb:22:in `block in <top (required)>' 
    # ./spec/controllers/posts_controller_spec.rb:37:in `block (2 levels) in <top (required)>' 
    # ./spec/controllers/posts_controller_spec.rb:40:in `block (2 levels) in <top (required)>' 

は私の青写真であります'それを呼ぶps私のrspecテストクリーナー。

答えて

0

私はRails 3.2.1、Machinist 2.0、およびruby 1.9.2-p290を使っていますが、まったく同じ問題を抱えていました。私は、Post.stub(:new)スタブメソッドとMachinist makeメソッドの実行の間に矛盾があると思いますが、私はコードを掘り下げませんでした。

私が思い付くした最高のソリューションです:(LETはRSpecのでレイジーロードされているので)それはスタブ方法に到達する前に

before do 
    new_post 
    Post.stub!(:new).and_return(new_post) 
    end 

これはLETを初期化します。それはハッキーですが、少なくともあなたと私はletステートメントを保持することができます。

+0

私はRails 3.2.1にアップグレードして同じ問題がありましたが、これは今のところうまくいくようです。 – map7

+0

それはあなたのために働いてうれしい。コードを調べて、どのプロジェクトに問題が通知される必要があるかを調べます。 – poetmountain