【问题标题】:Rspec Create/Update Unknown Attribute ErrorRspec 创建/更新未知属性错误
【发布时间】:2011-12-23 17:36:15
【问题描述】:

我正在使用最新版本的 Rails、Rspec 和 Factory Girl,当我尝试测试我的创建或更新逻辑时遇到了一个奇怪的问题。有问题的控制器是 Admin 命名空间的 PostsController,模型是 Post。工厂本身只是创建一个带有标题和正文的帖子。

describe 'create' do
before :all do
    @new = Factory.build(:post)
end

it 'should be successful' do
  post :create, :post => @new
  response.should be_success
end

describe 'failure' do
  it 'should not create a new page' do
    lambda do
      post :create, :post => @new
    end.should_not change(Post, :count)
  end

  it 'should render the new template' do
    post :create, :post => @new
    response.should render_template('new')
  end
end

结束

我一直收到的错误是:

ActiveRecord::UnknownAttributeError: 未知属性:post

我可能正在做一些非常愚蠢的事情,但我现在迷路了。

更新

以防万一有人偶然发现这个......

我做了一件非常愚蠢的事情。我的控制器出现错误,我没有调用 Post.new(params[:post]),而是调用 Post.new(params)...

【问题讨论】:

  • 顺便说一句,我知道上面的两个测试会失败,但我希望它们因为正确的原因而失败。我的计划是在确定一切正常后返回并添加一个真正的失败案例。

标签: ruby-on-rails-3 rspec


【解决方案1】:

这将有助于了解它在哪条线路上失败了。如果它在 'before :all' 块中失败,那么问题可能出在您的工厂代码中,这可能是为模型的不存在的 'post' 属性指定了一个值。

如果这是工厂正在做的事情,但 'post' 属性实际上应该存在,那么也许您在命令行中使用rspec 运行了它,而没有先运行rake db:test:prepare。在这种情况下,您的“帖子”表结构可能不是最新的。

【讨论】:

  • 每次都在 post :create 行上失败。我也运行了 db:test:prepare 并且检查了(只是因为...)以确保数据库中的所有内容都是最新的。
猜你喜欢
  • 2013-04-09
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
相关资源
最近更新 更多