Тест RSpec провалился в поисках нового набора глаз - PullRequest
1 голос
/ 31 мая 2010

Вот мой выпуск:

У меня есть две модели:

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

с этим простым файлом rout.rb

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

 resources :users do
  resources :tasks
 end
end 

эта схема:

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

и этот контроллер для моих задач:

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

Наконец вот мой тест:

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

Этот тест не пройден со следующим выводом:

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/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:1234:in `class_of_active_record_descendant'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:900:in `base_class'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:655:in `reset_table_name'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:647:in `table_name'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:932:in `arel_table'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/base.rb:927:in `unscoped'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activerecord/lib/active_record/named_scope.rb:30:in `scoped'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/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/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/callbacks.rb:431:in `_run__1954900289__process_action__943997142__callbacks'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/callbacks.rb:405:in `send'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/callbacks.rb:405:in `_run_process_action_callbacks'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/callbacks.rb:88:in `send'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/callbacks.rb:88:in `run_callbacks'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/abstract_controller/callbacks.rb:17:in `process_action'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/action_controller/metal/rescue.rb:8:in `process_action'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/abstract_controller/base.rb:113:in `process'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/abstract_controller/rendering.rb:39:in `sass_old_process'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/gems/haml-3.0.0.beta.3/lib/sass/plugin/rails.rb:26:in `process'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/action_controller/metal/testing.rb:12:in `process_with_new_base_test'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/action_controller/test_case.rb:390:in `process'
# /home/chopper/.rvm/gems/ruby-1.8.7-p249@rails3/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/ruby-1.8.7-p249@rails3/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/dependencies.rb:209:in `inject'

Кто-нибудь может помочь мне понять, что здесь происходит? Кажется, это проблема RSpec, поскольку действие контроллера действительно работает, но я могу ошибаться.

Ответы [ 2 ]

0 голосов
/ 08 октября 2010

Недавно я получил это сообщение об ошибке с моим приложением Rails 3, использующим rspec-rails 2.0.0.beta22 (под Ruby 1.9.2). После долгих попыток я обновил rspec-rails 2.0.0.rc и ошибка исчезла. Поэтому я бы порекомендовал обновить ваш драгоценный камень rspec-rails.

0 голосов
/ 31 мая 2010

Я заново создал ваш проект с использованием предоставленной вами информации, и спецификация контроллера работает без сбоев (Rails 2.3.5, Ruby 1.8.7). Итак, я предполагаю, что в вашем проекте и / или конфигурации Rails что-то не так? Извините, я знаю, что это не так много.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...