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 ...
语法。有什么想法吗?
答案 0 :(得分:0)
Noob在这里的状态。
在我的控制器创建动作中我有:
@blog_post = BlogPost.new(permitted_params)
它引发了错误,因为我传入了整个参数,因此它将blog_post
作为BlogPost
资源的属性读取。
修复:@blog_post = BlogPost.new(permitted_params[:blog_post])