RSpec / Rails发布测试后发布数据的问题

时间:2014-12-07 19:05:19

标签: ruby-on-rails-4 rspec-rails

Rails:4.1.7

RSpec-rails版本:3.1.0

我正在尝试编写请求规范来测试create模型的BlogPost操作。 RSpec似乎不喜欢我试图传递的数据参数,因为我在运行测试时看到以下错误:

ActiveRecord::UnknownAttributeError: unknown attribute: blog_post

RSpec代码:

require 'rails_helper'

RSpec.describe BlogPost do
  let!(:admin_user) { Fabricate(:admin_user) }
  let!(:blog_post) { Fabricate(:blog_post) }
  before { login(admin_user.email, admin_user.password) }

  describe 'POST /admin/blog_posts' do
    before do
      post admin_blog_posts_path, blog_post: {
        body: 'body text',
        title: 'title text',
        cover_image: '/assets/post.png',
        summary: 'cool post bruh',
        live_demo_url: 'livedemo.com',
        live_demo_url_text: 'click here',
        github_source: 'github.com/awesome'
      }
    end

    it 'should redirect to the blog posts index page' do
      expect(response).to redirect_to(admin_blog_posts_path)
      follow_redirect!
    end
  end
end

使用“blog_post这个词似乎并不喜欢。因为我尝试将其更改为任意一个单词,然后错误就消失了:

post admin_blog_posts_path, someresource: {
  title: 'title text'
}

此外,我还有一个put请求规范,该规范也使用了blog_post,并且工作正常:

describe 'PUT /admin/blog_posts/:id' do
    before do
      put admin_blog_post_path(blog_post.id), blog_post: {
        title: 'My new title'
      }
    end

    ...
  end

所以我不确定为什么RSpec不喜欢我的post admin_blog_posts_path, blog_post ...语法。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Noob在这里的状态。

在我的控制器创建动作中我有:

@blog_post = BlogPost.new(permitted_params)

它引发了错误,因为我传入了整个参数,因此它将blog_post作为BlogPost资源的属性读取。

修复:@blog_post = BlogPost.new(permitted_params[:blog_post])