2010-12-20 10 views
1

Ich habe gerade einige vorhandene Rails-Tests in rspec konvertiert, und jetzt scheitern die Tests in einem Namespace.Rspec-Tests schlagen fehl im Namespace

I.e. im Beispiel unten verläuft Accountcontroller spec, während die ChildrenController mit dem folgenden Fehler fehlschlägt:

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

app/Controller/account_controller.rb

class AccountController < ApplicationController 

spec/Controller/account_controller_spec.rb

require 'spec_helper' 

describe AccountController do 
    #... 
end 

app/controller/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 

I

  • Rubin-1.9.2-p0
  • Rails 3.0.3
  • rspec 2.3 mit bin. 0

Ich habe versucht, mit den Namensraumdefinitionen zu spielen, aber nein l Bis jetzt - irgendwelche Ideen ???

Antwort

1

Antwort schreiben für den Fall, dass jemand ein anderes Mal darüber stolpert!

Am Ende habe ich es wie nachfolgend Abflachen der Spezifikationen festgelegt:

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

spec>controllers>children_controller_spec.rb 
require 'spec_helper' 
describe Admin::ChildrenController do 
0

Sie Controller unter separaten Ordner halten, aber Sie haben verwenden File.dirname erfordern (FILE) + ‚/ ../../spec_helper‘ statt nur require 'spec_helper'

3

eine andere Lösung:

durch die Klasse als String definieren es normalerweise geladen wird:

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

dies funktionieren wird in der spec/Controller/admin Verzeichnis

edit: funktioniert nicht in 2.10.x

3

Ich hatte das gleiche Problem, und war nicht bereit, die Tests in einer platzieren unteres Verzeichnis. In meinem Fall war es Spork, der Dinge verpfuschte.

Um genau zu sein:

Spork.each_run do 
    ActiveSupport::Dependencies.clear 
end 

Ich legte einen Kontrolleur, wenn Spork läuft, sonst sollten Sie diese Zeile ignorieren.

Spork.each_run do 
    if /spork/i =~ $0 || RSpec.configuration.drb? 
    ActiveSupport::Dependencies.clear 
    end 
end 
+0

Das war die richtige Lösung für mich. – rafamvc

+1

Ich bin über alles auf dem Laufenden und 'RSpeconfiguration.drb 'kommt über spork und rspec w/o spork zurück. Also habe ich die gleiche Prüfung verwendet, die ich in test.rb für cache_classes habe, nämlich: 'if/spork/i = ~ $ 0 || ENV ['DRB'] == 'wahr' ' – databyte

2

Ich hatte das gleiche Problem und löste es auf folgende Weise:

Vorher:

# app/controllers/admin/awards_controller.rb: 
class Admin::AwardsController < ApplicationController 

# spec/controllers/admin/awards_controller_spec.rb: 
require 'spec_helper' 

describe Admin::AwardsController do 

Lauf rspec mir gab:

/Users/andy/.rvm/gems/[email protected]/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:503:in `load_missing_constant': Expected /Volumes/untitled/xxxx/app/controllers/admin/awards_controller.rb to define Admin::AwardsController (LoadError) 
(stacktrace...) 

Nach:

# spec/controllers/admin/awards_controller_spec.rb: 
require 'spec_helper' 
load "#{Rails.root}/app/controllers/admin/awards_controller.rb" 

describe Admin::AwardsController do 
Verwandte Themen