我的应用中有一个可以创建帖子的用户模型(代理)。他们可以从仪表板执行此操作。我还在他们的仪表板中显示了他们所有现有的帖子。当试图创建一个没有我正在测试以确保它呈现错误的内容的新帖子时,问题就出现了。创建一个包含内容的帖子是可行的,但创建一个没有内容的帖子会不断触发一个错误,即我的@posts 实例变量为零。不确定我是否错过了什么?
仪表板视图:
.container
.column.span9
- if current_agent
= render 'home/shared/agent_post_panel'
= render 'home/shared/agent_dashboard_tabs'
agent_dashboard_tabs:
.tabs-container
#posts
.content
- if @posts.any? //This is where the error is triggered
= render partial: 'shared/post', collection: @posts
仪表板控制器:
class HomeController < ApplicationController
before_filter :authenticate!, only: [:dashboard]
def index
end
def dashboard
if current_agent
@post = current_agent.posts.build
@posts = current_agent.posts
end
end
end
我的后控制器:
class PostsController < ApplicationController
before_filter :authenticate_agent!
def create
@post = current_agent.posts.build(params[:post])
if @post.save
flash[:notice] = "Post created!"
redirect_to dashboard_path
else
flash[:error] = "Post not created"
render 'home/dashboard'
end
end
end
测试:
feature 'Creating posts' do
let(:agent) { FactoryGirl.create(:agent) }
before do
sign_in_as!(agent)
visit dashboard_path
end
scenario "creating a post with valid content" do
fill_in 'post_content', :with => 'I love donuts'
expect { click_button "Post" }.to change(Post, :count).by(1)
end
scenario "creating a post with invalid content" do
expect { click_button "Post" }.not_to change(Post, :count)
click_button "Post"
page.should have_content("Post not created")
page.should have_content("can't be blank")
end