管理“删除”链接的Rspec测试失败。 Michael Hartl的ROR 3.2教程 - 第9.4.2章

时间:2012-05-26 14:40:23

标签: ruby-on-rails rspec capybara railstutorial.org

我正在关注Michael的ROR教程并创建用户身份验证系统。有一个管理员权限,允许用户删除其他用户。当以特权管理员用户身份登录时,特殊的“删除”链接会显示在用户列表页面上。 我的应用程序工作正常,但rspec测试失败的原因我不知道。

我已将测试分离到另一个文件spec/requests/sat_spec.rb,我正在尝试使用pry gem来调试它,但到目前为止还没有成功。

describe "delete links" do
  describe "as admin user" do
    let(:admin) { FactoryGirl.create(:admin) }
    before do
      sign_in admin
      visit users_path
      binding.pry          
    end
  it { should have_link('delete', href: user_path(User.first)) }

  it "should be able to delete another user" do
    expect { click_link('delete') }.to change(User, :count).by(-1)
  end    
end

测试失败:

1) separated admin tests delete links as admin user 
 Failure/Error: it { should have_link('delete', href: user_path(User.first)) }
   expected link "delete" to return something
 # ./spec/requests/sat_spec.rb:25:in `block (4 levels) in <top (required)>'

2) separated admin tests delete links as admin user should be able to delete another user
 Failure/Error: expect { click_link('delete') }.to change(User, :count).by(-1)
 Capybara::ElementNotFound:
   no link with title, id or text 'delete' found
 # (eval):2:in `click_link'
 # ./spec/requests/sat_spec.rb:28:in `block (5 levels) in <top (required)>'
 # ./spec/requests/sat_spec.rb:28:in `block (4 levels) in <top (required)>'

这里可能出现什么问题,或者更重要的是如何调试它?

您可以在此处https://github.com/tomek-rusilko/miniatury_katalog_2

分叉我的代码

2 个答案:

答案 0 :(得分:9)

您希望/users页面包含旁边带有“删除”链接的用户列表。但是你没有用简单的用户填充你的TEST数据库。它只包含一个用户admin。但根据您的users/_user.html.erb,此类用户没有“删除”链接。因此,添加至少一个用户创建语句,然后重试。

答案 1 :(得分:0)

let(:admin) { FactoryGirl.create(:admin) }

这很好,因为你有(在spec / factories.rb中)

factory :admin do
  admin true
end

但同时,在models / user.rb中:

attr_accessible :name, :email, :password, :password_confirmation

我敢打赌,工厂女孩正在使用群众分配来设置:admin =&gt;是的,然后由attr_accessible删除。

但更重要的是,你如何调试它?通过询问“发生了什么?”和“我期待发生什么?”以及其中的变化,直到你发现两个问题的答案在中间相遇。在这种情况下,我开始提出的问题是:导致链接显示的是什么?我在规范中设置的模型是真的吗?规格是否达到了我期望的页面?当我使用浏览器点击页面时,模型是否以相同的方式运行?

但所有这些只是“正在发生的事情的变化?”和“我期待发生什么?”