1
我想要RSpec控制器規格通過。它與腳手架生成的規範幾乎相同,只是用戶首先登錄設計。 如果我禁用從控制器(它檢查權限)'load_and_authorize_resource',一切工作正常。但是,如果我把線回,它失敗:RSpec新手:設計/坎康導致否則工作控制器規格失敗
1) PostsController logged in administrator POST create with valid params assigns a newly created post as @post
Failure/Error: post :create, :post => {'title' => 'test title'}
<Post(id: integer, title: string, cached_slug: string, content: text, user_id: integer, created_at: datetime, updated_at: datetime) (class)> received :new with unexpected arguments
expected: ({"title"=>"test title"})
got: (no args)
# ./spec/controllers/posts_controller_spec.rb:52:in `block (5 levels) in <top (required)>'
我曾以爲該規範並沒有在用戶登錄正確的,但放current_user.role.name證實了正確的用戶登錄,並具有必要的作用。在瀏覽器中執行實際的過程確認它可以按照需要工作。
任何人有任何建議嗎?我很難過。下面的控制器:
def create
@post = Post.new(params[:post])
@post.user = current_user
respond_to do |format|
if @post.save
flash[:notice] = "Post successfully created"
format.html { redirect_to(@post)}
format.xml { render :xml => @post, :status => :created, :location => @post }
else
format.html { render :action => "new" }
format.xml { render :xml => @post.errors, :status => :unprocessable_entity }
end
end
end
...而在規範的規範
describe "with valid params" do
it "assigns a newly created post as @post" do
Post.stub(:new).with({'title' => 'test title'}) { mock_post(:save => true) }
post :create, :post => {'title' => 'test title'}
assigns(:post).should be(mock_post)
end
...和配套的東西:
before(:each) do
@user = Factory(:admin)
sign_in @user
end
def mock_post(stubs={})
@mock_post ||= mock_model(Post, stubs).as_null_object
end
非常感謝......