2012-02-07 4 views
0

Iレールに3.1フォーラムアプリケーションのトピックおよびポストを作成するためのコードを有する:検証エラーが空である

def create 
    @topic = Topic.new(:name => params[:topic][:name], :last_post_at => Time.now) 
    @topic.forum_id = params[:topic][:forum_id] 
    @topic.user = current_user 

    if @topic.save 
    @post = Post.new(:content => params[:post][:content]) 
    @post.topic = @topic 
    @post.user = current_user 

    @post.save! 
    ... 

対応するフォームを介しcreate方法への投稿、トピックポストが作成され、両方ともsaveコールが成功しました。

機能テストでcreateメソッドを呼び出すと、トピックは保存されますが、投稿に検証エラーがあります。

ActiveRecord::RecordInvalid: Validation failed: 
app/controllers/topics_controller.rb:23:in `create' 
test/functional/topics_controller_test.rb:26:in `block in <class:TopicsControllerTest>' 

テストのようになります。私は、デバッガを介して、または@post.errors.full_messagesでポストオブジェクトのエラーを表示する場合

test "should create topic" do 
    post :create, :topic => {:name => "New topic", :forum_id => forums(:one).id}, :post => {:content => "Post content"} 
end 

current_userは、セットアップ方法を経由してログインしている。)

エラー配列は空です。

Postモデルは次のようになります。

class Post < ActiveRecord::Base 
    attr_accessible :content 

    belongs_to :topic 
    belongs_to :user 
end 

そしてTopicモデル:

class Topic < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :last_poster, class_name: 'User' 

    attr_accessible :name, :last_poster_id, :last_post_at 

    belongs_to :forum 
    has_many :posts, :dependent => :destroy 
end 

どのように検証エラーを引き起こしているものを見つけることができますか?

+0

実際のエラーメッセージを投稿できますか?また、置くことができるポストモデルの検証もありますか? – jstim

+0

あなたのトピックモデルはどのように見えますか? – Kelend

+0

それは完全なポストモデルですか?妥当性検査はまったくありませんか? – Thilo

答えて

0

問題は、失敗したテストの前に実行されたテストでmochaのPost.any_instance.stubs(:valid?).returns(false)を使用したことでした。

明らかに、Post.any_instance.unstub(:valid?)を呼び出すことによって、他のテストに進む前に元の動作を復元する必要があります。

関連する問題