這裏我的問題:RSpec的測試失敗尋找一套新的眼睛
我有兩個型號:
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
這個簡單的routes.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
和這個控制器爲m Ÿ任務:
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/[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'
任何人可以幫助我明白是怎麼回事?這似乎是一個RSpec問題,因爲控制器操作確實有效,但我可能是錯的。
'Factory'做了什麼?這裏的一切都很好。如果你不使用'Factory',但是爲了測試而手動創建用戶呢?你有沒有將YAML裝置加載到某處?當我發現我在夾具中調用受保護的方法時,我只見過這個錯誤。 – x1a4 2010-05-31 05:37:02
工廠 是Factory_Girl的主要方法,但即使我只是使用Active Record來創建@user對象和@task對象沒有任何變化。 – TheDelChop 2010-05-31 12:24:32
我有類似的問題,沒有線索,你解決了嗎?我最終存根查找方法,但你做了同樣的,它沒有奏效。 – Mauricio 2010-09-22 21:51:49