【发布时间】:2010-10-24 03:32:44
【问题描述】:
尝试在 Rspec 中测试控制器。 (Rails 2.3.8、Ruby 1.8.7、Rspec 1.3.1、Rspec-Rails 1.3.3)
我正在尝试发布创建但我收到此错误消息:
ActiveRecord::AssociationTypeMismatch in 'ProjectsController with appropriate parameters while logged in: should create project' User(#2171994580) 预期,得到 TrueClass(#2148251900)
我的测试代码如下:
def mock_user(stubs = {})
@user = mock_model(User, stubs)
end
def mock_project(stubs = {})
@project = mock_model(Project, stubs)
end
def mock_lifecycletype(stubs = {})
@lifecycletype = mock_model(Lifecycletype, stubs)
end
it "should create project" do
post :create, :project => { :name => "Mock Project",
:description => "Mock Description",
:owner => @user,
:lifecycletype => mock_lifecycletype({ :name => "Mock Lifecycle" }) }
assigns[:project].should == mock_project({ :name => "Mock Project",
:description => "Mock Description",
:owner => mock_user,
:lifecycletype => mock_lifecycletype({ :name => "Mock Lifecycle" })})
flash[:notice].should == "Project was successfully created."
end
当我尝试在上面的代码中执行:owner => @user 时,问题就来了。出于某种原因,它认为我的@user 是TrueClass 而不是User 类对象。有趣的是,如果我注释掉post :create 代码,然后我做一个简单的@user.class.should == User,它就可以工作,这意味着@user 确实是一个User 类对象。
我也试过
:owner => mock_user
:owner => mock_user({ :name => "User",
:email => "user@email.com",
:password => "password",
:password_confirmation => "password })
:owner => @current_user
注意@current_user 也被模拟为用户,我对其进行了测试(同样的方式,@current_user.class.should == User),并且当我尝试设置 :owner 时还返回一个TrueClass。
有人知道为什么会这样吗?
谢谢!
【问题讨论】:
标签: ruby-on-rails mocking rspec functional-testing