【问题标题】:Ruby Problemewith filter and RSpecRuby Problemewith filter 和 RSpec
【发布时间】:2011-12-26 17:04:51
【问题描述】:

我不明白为什么这个RSpec 测试失败了。有什么建议吗?
我尝试处理帖子的破坏。只有创建帖子的用户才能删除它们。

class PostsController < ApplicationController
  before_filter :authorized_user, :only => :destroy

def destroy
  post = Post.find(params[:id])
  post.destroy
  redirect_to posts_path, notice: 'Post successfully destroyed'
end

private  
 def authorized_user
  redirect_to posts_path, notice: 'Access Denied' if current_user.posts.find_by_id(params[:id]).nil?
end

测试:

describe "DELETE destroy" do
 before(:each) do
   @post = stub_model(Post, :id => 23)
   @post.stub(:destroy){true}
   Post.stub(:find){@post}
 end
 it "should search the post" do
  Post.should_receive(:find).with(@post.id.to_s).and_return(@post)
  delete :destroy, {:id => @post.id }
 end

 it "should destroy the post" do
  @post.should_receive(:destroy)
  delete :destroy, {:id => @post.id }
 end
 it "should redirect to the posts list" do
  delete :destroy, {:id => @post.id }
  response.should redirect_to posts_path
 end
end

还有错误:

  1) PostsController DELETE destroy should search the post
 Failure/Error: Post.should_receive(:find).with(@post.id.to_s).and_return(@post)
   (<Post(id: integer, title: string, body: text, created_at: datetime, updated_at: datetime, user_id: integer) (class)>).find("23")
       expected: 1 time
       received: 0 times
 # ./spec/controllers/posts_controller_spec.rb:67:in `block (3 levels) in <top (required)>'

【问题讨论】:

    标签: testing rspec controller posts


    【解决方案1】:

    我认为这是因为在 before(:each) 块中您必须登录用户。你有 before_filter,这个过滤器只用于 :destroy。因此,当您没有登录用户时,您的测试将失败,因为它实际上是一个没有“运行测试”权限的用户。所以你应该把这段代码放在 before(:each):

    user = way_to_make_user - I do it with: FactoryGirl.create(:user,role=>"client")
    controller.sign_in user
    

    如果您告诉我您使用什么进行身份验证,我可以为您提供更多帮助。我使用康康宝石。所以重点是每次测试前都要登录用户。

    【讨论】:

      猜你喜欢
      • 2019-04-25
      • 1970-01-01
      • 2019-02-16
      • 2020-08-31
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      相关资源
      最近更新 更多