Rspec:sign_in使用capybara并不适用于控制器规范

时间:2014-03-19 13:10:40

标签: ruby-on-rails rspec capybara

我正在从Rails教程第9章开始练习9:http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users#fnref-9_9 "修改销毁操作以防止管理员用户破坏自己。 (先写一个测试。)"

我开始创建测试: users_controller_spec.rb

require 'spec_helper'

describe UsersController do

  describe "admins-userscontroller" do
    let(:admin) { FactoryGirl.create(:admin) }
    let(:non_admin) { FactoryGirl.create(:user) }

    it "should not be able to delete themself" do
      sign_in admin
      expect { delete :destroy, :id => admin.id }.not_to change(User, :count)
    end
  end
end

然而,注意到即使没有实现禁止管理员删除自己的逻辑,测试也会通过,除非我改变行

sign_in admin

sign_in admin, no_copybara: true

此更改测试失败后(如预期的那样)

sign_in位于support \ utilities.rb文件中,如下所示:

def sign_in(user, options={})
  if options[:no_capybara]
    # Sign in when not using Capybara.
    remember_token = User.new_remember_token
    cookies[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.hash(remember_token))
  else
    visit signin_path
    fill_in "Email",    with: user.email
    fill_in "Password", with: user.password
    click_button "Sign in"
  end
end

有谁知道它为什么不与水豚合作?它看起来像" else"上面代码的部分在使用水豚时失败/没有执行,但它没有返回任何错误(例如,#34; Email"字段未找到,所以它看起来像是' s渲染)...

其他问题是,如果我删除non_admin而不是admin:

expect { delete :destroy, :id => non_admin.id }.not_to change(User, :count)

测试通过,这意味着non_admin不会被删除...为什么它适用于admin而不是non_admin?

问题2: capybara不应该在2.0+的请求规范中工作,但我使用capybara 2.1和rspec-rails 2.13.1并且它在请求规范中工作得很好(实际上甚至是教程告诉我们要做的),甚至没有输出任何警告......

0 个答案:

没有答案