2013-02-27 3 views
0

내 레일 앱을 테스트하는 데 문제가 있습니다. 내 시험이 코드를 가지고 : 나는 블록 "valores válidos"없이 테스트를 실행하면테스트 루프의 각 루프

describe Categoria do 

    let(:categoria) { FactoryGirl.create(:categoria) } 

    it { should be_valid } 

    describe "agregar campos" do 
    before { @campo = categoria.campos.build(nombre: "campo1", tipo_campo: "check_box") } 

    it { @campo.should be_valid } 
    it { @campo.should respond_to :nombre } 
    it { @campo.should respond_to :tipo_campo } 
    it { @campo.should respond_to :requerido } 

    describe "valores válidos" do 
     valores = %w[texto texto_extenso numero decimal check_box] 
     valores.each do |valido| 
     @campo.tipo_campo = valido 
     @campo.should be_valid 
     end  
    end 
    end 
end 

를 모든 다른 테스트는 통과하지만 모든 테스트를 실행하면이 오류 얻을 :

Rack::File headers parameter replaces cache_control after Rack 1.5. 
Exception encountered: #<NoMethodError: undefined method `tipo_campo=' for nil:NilClass> 
backtrace: 
/home/alejo/proyectos/lachiquitienda/spec/models/categoria_spec.rb:38:in `block (4 levels) in <top (required)>' 
/home/alejo/proyectos/lachiquitienda/spec/models/categoria_spec.rb:37:in `each' 
/home/alejo/proyectos/lachiquitienda/spec/models/categoria_spec.rb:37:in `block (3 levels) in <top (required)>' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe' 
/home/alejo/proyectos/lachiquitienda/spec/models/categoria_spec.rb:35:in `block (2 levels) in <top (required)>' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe' 
/home/alejo/proyectos/lachiquitienda/spec/models/categoria_spec.rb:27:in `block in <top (required)>' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/dsl.rb:18:in `describe' 
/home/alejo/proyectos/lachiquitienda/spec/models/categoria_spec.rb:5:in `<top (required)>' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:245:in `load' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:245:in `block in load' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:236:in `load_dependency' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:245:in `load' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `block in load_spec_files' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `map' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load_spec_files' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:22:in `run' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/spork-0.9.2/lib/spork/test_framework/rspec.rb:11:in `run_tests' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/spork-0.9.2/lib/spork/run_strategy/forking.rb:13:in `block in run' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/spork-0.9.2/lib/spork/forker.rb:21:in `block in initialize' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/spork-0.9.2/lib/spork/forker.rb:18:in `fork' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/spork-0.9.2/lib/spork/forker.rb:18:in `initialize' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/spork-0.9.2/lib/spork/run_strategy/forking.rb:9:in `new' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/spork-0.9.2/lib/spork/run_strategy/forking.rb:9:in `run' 
/home/alejo/.rvm/gems/ruby-1.9.3-p374/gems/spork-0.9.2/lib/spork/server.rb:48:in `run' 
/home/alejo/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/drb/drb.rb:1548:in `perform_without_block' 
/home/alejo/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/drb/drb.rb:1508:in `perform' 
/home/alejo/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/drb/drb.rb:1586:in `block (2 levels) in main_loop' 
/home/alejo/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/drb/drb.rb:1582:in `loop' 
/home/alejo/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/drb/drb.rb:1582:in `block in main_loop' 
[Finished in 5.9s] 

왜 @campo는 각 루프에 iniside가 없습니까? 당신이 그것을 액세스하려고 할 때 미리

답변

2

에서

덕분에 당신은 시험의 문맥 안에 없기 때문에.

다른 모든 테스트는 it { } 블록으로 표시됩니다 (rspec도 specify { } 블록을 허용합니다). 루프는 테스트를 정의하지 않습니다. 다음과 같은

시도 뭔가 :

describe "valores válidos" do 
    valores = %w[texto texto_extenso numero decimal check_box] 
    valores.each do |valido| 
    it "allows the value #{valido}" do # put your own translation in here! 
     @campo.tipo_campo = valido 
     @campo.should be_valid 
    end 
    end  
end 

이제 과제는 내부 테스트하고 변수 @campo 정의됩니다.

+0

고맙습니다. 이것이 내가 stackoverflow 사랑하는 이유입니다 – Alejo