2010-05-31 2 views
1

Voici ma question:essai RSpec ne recherche d'une nouvelle série d'yeux

J'ai deux modèles:

class User < ActiveRecord::Base 
    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :username 

    has_many :tasks 
end 

class Task < ActiveRecord::Base 

    belongs_to :user 
end 

avec ce simple fichier routes.rb

TestProj::Application.routes.draw do |map| 

resources :users do 
    resources :tasks 
end 
end 

cette schéma:

ActiveRecord::Schema.define(:version => 20100525021007) do 

    create_table "tasks", :force => true do |t| 
    t.string "name" 
    t.integer "estimated_time" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "user_id" 
end 

create_table "users", :force => true do |t| 
    t.string "email" 
    t.string "password" 
    t.string "password_confirmation" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "username" 
end 

add_index "users", ["email"], :name => "index_users_on_email", :unique => true 
add_index "users", ["username"], :name => "index_users_on_username", :unique => true 

end 

et ce contrôleur pour m tâches y:

class TasksController < ApplicationController 
    before_filter :load_user 

    def new 
    @task = @user.tasks.new 
    end 

    private 

    def load_user 
    @user = User.find(params[:user_id]) 
    end 

end 

Voici enfin mon test:

require 'spec_helper' 

describe TasksController do 

    before(:each) do 
    @user = Factory(:user) 
    @task = Factory(:task) 
    end 

    #GET New 
    describe "GET New" do 

    before(:each) do 
     User.stub!(:find).with(@user.id.to_s).and_return(@user) 
     @user.stub_chain(:tasks, :new).and_return(@task) 
    end 

    it "should return a new Task" do 
     @user.tasks.should_receive(:new).and_return(@task) 
     get :new, :user_id => @user.id 
    end 
end 
end 

Ce test échoue avec la sortie suivante:

1) TasksController GET New should return a new Task 
Failure/Error: get :new, :user_id => @user.id 
undefined method `abstract_class?' for Object:Class 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:1234:in `class_of_active_record_descendant' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:900:in `base_class' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:655:in `reset_table_name' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:647:in `table_name' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:932:in `arel_table' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:927:in `unscoped' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/named_scope.rb:30:in `scoped' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:405:in `find' 
# ./app/controllers/tasks_controller.rb:15:in `load_user' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/callbacks.rb:431:in `_run__1954900289__process_action__943997142__callbacks' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/callbacks.rb:405:in `send' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/callbacks.rb:405:in `_run_process_action_callbacks' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/callbacks.rb:88:in `send' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/callbacks.rb:88:in `run_callbacks' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/abstract_controller/callbacks.rb:17:in `process_action' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/action_controller/metal/rescue.rb:8:in `process_action' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/abstract_controller/base.rb:113:in `process' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/abstract_controller/rendering.rb:39:in `sass_old_process' 
# /home/chopper/.rvm/gems/[email protected]/gems/haml-3.0.0.beta.3/lib/sass/plugin/rails.rb:26:in `process' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/action_controller/metal/testing.rb:12:in `process_with_new_base_test' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/action_controller/test_case.rb:390:in `process' 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/action_controller/test_case.rb:328:in `get' 
# ./spec/controllers/tasks_controller_spec.rb:20 
# /home/chopper/.rvm/gems/[email protected]/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/dependencies.rb:209:in `inject' 

Quelqu'un peut-il me aider à comprendre ce qui se passe ici? Cela semble être un problème RSpec puisque l'action du contrôleur fonctionne réellement, mais je peux me tromper.

+0

Que fait 'Factory'? Tout ici a l'air bien. Que faire si vous n'utilisez pas 'Factory', mais créez l'utilisateur à la main pour le test? Avez-vous des appareils YAML chargés quelque part? J'ai seulement vu cette erreur quand j'ai découvert que j'appelais une méthode protégée dans un appareil. – x1a4

+0

Factory est la méthode principale de Factory_Girl, mais même moi, je ne fais qu'utiliser Active Record pour créer l'objet @user et l'objet @task ne change rien. – TheDelChop

+0

J'ai un problème similaire et ne pas avoir la moindre idée, l'avez-vous réparé? Je finis par talonner la méthode de recherche mais vous avez fait la même chose et ça n'a pas marché. – Mauricio

Répondre

0

J'ai recréé votre projet à partir de zéro en utilisant les informations que vous avez fournies, et la spécification du contrôleur fonctionne sans aucune défaillance (Rails 2.3.5, Ruby 1.8.7). Donc je devine qu'il y a quelque chose qui cloche dans votre configuration de projet et/ou Rails? Désolé, je sais que ce n'est pas grand chose à faire.

0

J'ai récemment reçu ce message d'erreur avec mon application Rails 3 en utilisant rspec-rails 2.0.0.beta22 (sous Ruby 1.9.2). Après beaucoup de cheveux tirant j'ai mis à jour vers les versions récentes rspec-rails 2.0.0.rc et l'erreur a disparu. Donc, je vous recommande de mettre à jour votre gem rspec-rails.