2011-08-30 9 views
0

私は、機能テスト、テスト/機能/ cust_infos_controller_test.rbでのRails 3でアプリを書いて、私はこれらを持っている:それはちょうど見つけるとのRails 3コントローラーのテスト

require 'test_helper' 

class CustInfosControllerTest < ActionController::TestCase 
    # Replace this with your real tests. 
    test "should get cust" do 
    get :customerinfo 
    assert_response :success 
    assert_not_nil assigns("cust_infos") 
    end 
end 

私のコントローラは非常に簡単ですすべてのお客様の情報:

class CustInfosController < ApplicationController 
    def customerinfo 
    @cust_info = CustInfo.find(:all, :order=>"cust_id") 
    @cust_info.each do |ci|            
     if ci.upload_freq == 'W' 
     ci.upload_freq = 'Weekly' 
     elsif ci.upload_freq == 'M' 
     ci.upload_freq = 'Monthly' 
     end 
    end 
    end 
end 

私はそれを実行したとき:

$ ruby -Itest test/functional/cust_infos_controller_test.rb 

私は、次のERRを得ましたまたは:

Loaded suite test/functional/cust_infos_controller_test 
Started 
E 
Finished in 0.025258 seconds. 

1) Error: 
test_should_get_cust(CustInfosControllerTest): 
ActiveRecord::StatementInvalid: PGError: ERROR: numeric field overflow 
DETAIL: A field with precision 4, scale 0 must round to an absolute value less than 10^4. 

: INSERT INTO "cust_infos" ("cust_id") VALUES (298486374) 


1 tests, 0 assertions, 0 failures, 1 errors 

私のcust_infosテーブルでは、私は整数としてcust_idを持っています。しかし、私はちょうどいくつかのレコードを取得するためにコントローラテストを実行したとき、なぜアクティブなレコードが挿入ステートメントを実行するのかわかりません。これをどうやって解決するのですか?

更新:私はcustomerinfoメソッドのすべての行をコメントアウトし、同じテストを実行します。まったく同じ結果が得られました。だから私はそれが私のメソッドの振る舞いではなく、むしろRailsであると推測しています。何かヒント?

+0

あなたはcustomerinfoメソッドを投稿できますか? –

+0

私はそれを投稿しました。 activerecordを使用してすべての顧客を検索します。それはすべてです。ビューに結果が表示されます。 – swingfuture

答えて

0

あなたは何をしようとしているのか分かります。あなたがしなければならないことは、あなたの見解のためのヘルパーを作成することです。

class CustInfosController < ApplicationController 
    def customerinfo 
    @cust_info = CustInfo.find(:all, :order=>"cust_id") 
    end 
end 

cust_info_controller.rb

application_helper.rb

def display_upload_freq(s) 
    case s 
    when 'W' 
    'Weekly' 
    when 'M' 
    'Monthly' 
    end 
end 

その後、あなたのビューではupload_freq、使用dislay_upload_freq(ci.upload_freq)のために、@cust_infoを反復処理しているとき。 @ cust_info.each do | ci |があると仮定します。それでは、dbを何かを保存することと混同しないでください。

+0

私はこの属性をdbとは違って表示しようとしていました。 dbを変更する必要がないので、私はそれを保存しませんでした。私はこれを行うために別のモデルを構築できたと思う。しかしそれが単なる一つの属性だと思った。 – swingfuture

+0

あなたのニーズをスイートに変更しました。 =) –

+0

それはそれを行う良い方法です。それでも私は持っていたテストの問題を解決しませんでした。 – swingfuture

0

テストデータを作成するために工場や什器を使用していますか?そうでない場合は、どのように作成していますか?私の推測では、あなたのテストデータがセットアップされているときに挿入が起こっているのですが、あなたのコントローラで起こっていることが原因ではありません。その推測の第2の部分は、コントローラのすべてのコードをコメントアウトすることでエラーを取り除くことができないという事実によって裏付けられています。

0

私はこの投稿がかなり古くなっていることを知っていますが、誰かが検索エンジンによってここに持ち込まれた場合に私は答えを投稿します。 私はまったく同じ問題を抱えていましたが、この問題はtest/fixtures/{name_of_your_model} .ymlのフィクスチャファイルから発生しています。

one: {} 
# column: value 
# 
two: {} 
# column: value 

、あなたがテストを実行する場合、それはこの器具を使用してテスト・データベースを作成しようとします:Railsは私の場合には、それはこのように見えた、このファイル内のいくつかの初期値を追加します。それが問題の発生場所です。あなたのテーブルにnull IDを許可していない間に空のレコードを作成しようとしています。

これらのフィクスチャを削除するか、適切な値を入力して問題を解決する必要があります。

関連する問題