0

Rails 3.2.8 アプリケーションでカスタム投稿アクションをテストする際に問題が発生しています。トランザクションフィクスチャがtrueに設定されていることと関係があると思いますが、診断に役立つ可能性があります。

これは私のspec_helper.rbにあります

config.use_transactional_fixtures = true

そして、私のコントローラーの仕様は次のようになります。

require 'spec_helper'   
describe Api::V1::NasController do       
  login_user        
  describe "GET #nas" do      
    it "posts to startup as new (state) controller" do
      @location = FactoryGirl.create(:location_full)
      @location.users << @current_user
      nas = FactoryGirl.create(:nas, location_id: @location.id )   
      nas.update_attributes!(:state => 'initialised')
      post :start_up, :token => nas.token, :key => nas.key
      response.should be_success
    end   
  end   
end

サーバーログで投稿が発生していることを確認できますが、テストは次のように失敗します。

   1) Api::V1::NasController GET #nas posts to startup as new (state) controller
 Failure/Error: post :start_up, :token => @nas.token, :key => @nas.key
 NoMethodError:
   undefined method `slice' for nil:NilClass
 # ./app/helpers/nas_helper.rb:26:in `queue'
 # ./app/controllers/api/v1/nas_controller.rb:99:in `start_up'
 # ./spec/controllers/api/v1/nas_controller_spec.rb:16:in `block (3 levels) in <top (required)>'

コントローラには、トークンとキーを取得し、Nas が見つからない場合にヘッドを無許可にする前のフィルタがあります。

このテストでは、Nas が実際に検出され、コントローラー アクションに移動します。

def start_up
   @token = params[:token]
   @nas = Nas.find_by_token("#{@token}")
   if @nas
   [ do some stuff ]
   ....
   NasSync.enqueue(@nas)   
   ...       
end

NasSync.enqueue(@nas) で失敗し、次のヘルパー メソッドが呼び出されます (省略した resque ワーカーから)。

 def self.queue(nas)  
   node = Nas.find(nas.id).nasname.slice(0..3)
   .....
 end

「現実の」世界では、この URL に正常に投稿できます。失敗するのはテスト環境だけです。

 node = Nas.find(nas.id).nasname.slice(0..3)

スライスする Nas が見つかりません。

Nas が見つからない理由がわかりません。ノードをハードコーディングすると、テストに合格します。

NAS がヘルパーに送信されない特定の理由はありますか??

任意の提案/ヘルプをいただければ幸いです。

- アップデート -

トランザクションフィクスチャをオフにし、残った混乱をソートしましたが、まだエラーが発生しています:

 undefined method `slice' for nil:NilClass
4

1 に答える 1

0

実際にはトランザクションフィクスチャが直接問題を引き起こしているわけではありませんでしたが、それらをオフにすると、最終的に問題が特定されました。これは、実際には私のコードの小さなバグでした。

トランザクション内での生活は簡単で、率直で、おそらくかなりまばたきしていました。おそらくすべきではないときに、物事は過ぎ去りました

それらをオフにすると、面倒な種を廃棄し、必要なときにデータを作成する必要がありました。

怠惰なコーディングは頭痛の種となり、より多くの作業が必要になります。

また、自分の能力をもっと信頼し、書かれたテストを信頼する必要があることにも気づきました。この場合、その小さな小さなバグが大きな問題を引き起こした可能性があります。よく過ごした3日間。

于 2012-11-20T23:16:33.157 に答える