2016-06-24 4 views
0

のテスト中のActiveRecordから保存されたデータを取り出します。インデックスだけのメソッドは、記事をactiverecordに保存しますが、テストコードから記事を取得できません。できない私は、コントローラをテストしてい

私には何が欠けていますか?私が手

コントローラ

class ArticlesController < ApplicationController 
    def create 

    if Article.new(:title => "abc").save 
     render status: 200, json: "" 
    else 
     render status: 500, json: "" 
    end 

    end 
end 

テスト

require 'test_helper' 

class ArticlesControllerTest < ActionController::TestCase 
    test "should get create" do 
    get :create 
    assert_response :success 
    assert_nil Article.where(title: "abc"), "Article nil" 

    end 

end 

結果

F 

Finished in 0.100930s, 9.9079 runs/s, 19.8157 assertions/s. 

    1) Failure: 
ArticlesControllerTest#test_should_get_index [test/controllers/articles_controller_test.rb:7]: 
Article nil. 
Expected #<ActiveRecord::Relation [#<Article id: 980190963, title: "abc", created_at: "2016-06-24 13:23:36", updated_at: "2016-06-24 13:23:36">]> to be nil. 

1 runs, 2 assertions, 1 failures, 0 errors, 0 skips 
+0

を与えるだろう。 – Bigair

+0

"index"を "作成"に編集しました – Bigair

+0

開発データベースを使用して環境を直接テストすることはできません。テストケースの実行時にデータベースにデータを挿入するよりも、最初にテスト環境用のデータベースを作成する必要があります。 –

答えて

1

次あなたが実際に作成された記事のレコードを受けています。テスト出力の最後の行を見てください。 "Expected #ActiveRecord ..."と書かれています。つまり、Articleオブジェクトを返しましたが、何も返されないはずです(nil)。

あなたのテストコードの問題は、あなたのアサーションラインです。 assert_nilはこの場合に使う間違った方法です。ちょうどあなたのコードとテストを見て

assert_equal "abc", Article.first.title 
+0

本当に申し訳ありませんが間違ったエラーメッセージを貼り付けていましたが、正しいものに置き換えました。私は問題が私がテストデータベースを作成していないと思う。 – Bigair

+0

貼り付けられたコードは私が見せたいものではありませんでしたが、メソッドを使ってオブジェクトを取得した後に ".first"を追加する必要があることに気付きました。 – Bigair

1

のようなものを試してみてください。

あなたは確かにタイトル「ABC」でArticleオブジェクトを作成するのですGET#createコールを、持っています。あるので、それが必要

assert_nil Article.where(title: "abc"), "Article nil" 

失敗し、そして:

次に、あなたのテストでは、あなたがタイトルとして「ABC」との記事が作成されており、このアクションを呼び出し、その後、この主張を行いますタイトル(あなたはあなたのコントローラでそれを作成しました)として 'abc'の記事。 your'reがやって何

は間違ってアサーションです。あなたは記事をassert_nilしたくないので、あなたは彼がそこにいることを確認したいので、は022ではないです。以下のような

何か:

class ArticlesControllerTest < ActionController::TestCase 
    test "should get create" do 
    get :create 
    assert_response :success 
    refute_nil Article.where(title: "abc").first, "Article should not be nil" 
    end 
end 

はさておき、この問題Article.whereは、それが何の記事が見つからない場合はnilを返しません。それは私が「インデックス」とは、例えば、これは、「作成」しなければならないか何かを使用しているべきではありませんが、私は質問のポイントが明確だと思うあなたは、空のActiveRecord ::関係( #<ActiveRecord::Relation []>

関連する問題