1

いくつかの既存のrailsテストをrspecに変換したところ、名前空間にあるテストは失敗します。

つまり、以下の例では、AccountController仕様は合格ですが、ChildrenControllerは次のエラーで失敗します。

in `load_missing_constant': Expected /.../app/controllers/admin/children_controller.rb to define Admin::ChildrenController (LoadError)

app / controllers / account_controller.rb

class AccountController < ApplicationController

spec / controllers / account_controller_spec.rb

require 'spec_helper'

describe AccountController do
  #...
end

app / controllers / admin / children_controller.rb

class Admin::ChildrenController < ApplicationController

spec / controllers / admin / children_controller_spec.rb

require 'spec_helper'

describe Admin::ChildrenController do  
   include ::ControllerHelper 
   #... 
end

使っています

  • ルビー-1.9.2-p0
  • Rails 3.0.3
  • rspec 2.3.0

名前空間の定義を試してみましたが、今のところ運がありません-アイデアはありますか?

4

5 に答える 5

4

別の解決策:

クラスを文字列として定義すると、通常どおりロードされます。

# children_controller_spec.rb
require 'spec_helper'
describe "Admin::ChildrenController" do  
  # -something-
end

これは spec/controller/admin ディレクトリで機能します

編集: 2.10.x では動作しません

于 2012-06-19T12:24:11.107 に答える
3

私は同じ問題を抱えており、テストを下位のディレクトリに配置するつもりはありませんでした。私の場合、混乱していたのは Spork でした。

正確には:

Spork.each_run do
  ActiveSupport::Dependencies.clear
end

spork が実行されている場合はチェッカーを配置しました。それ以外の場合は、この行を無視してください。

Spork.each_run do
  if /spork/i =~ $0 || RSpec.configuration.drb?
    ActiveSupport::Dependencies.clear
  end
end
于 2012-06-22T14:01:39.390 に答える
1

誰かがこれに出くわした場合に備えて、回答を投稿してください。

最後に、次のように仕様を平坦化して修正しました。

app>controllers>admin>children_controller.rb
class Admin::ChildrenController < ApplicationController

spec>controllers>children_controller_spec.rb
require 'spec_helper'
describe Admin::ChildrenController do  
于 2010-12-21T10:48:37.107 に答える
0

コントローラは別のフォルダに保存できますが、require'spec_helper'ではなくrequireFile.dirname( FILE )+'/../../spec_helper'を使用する必要があります。

于 2011-06-20T19:23:43.043 に答える