【问题标题】:Wrong number of arguments while calling method in different RSpec contexts在不同的 RSpec 上下文中调用方法时参数数量错误
【发布时间】:2012-01-12 10:42:14
【问题描述】:

这是我的小问题,让我觉得自己很愚蠢。我正在使用 RSpec 测试我的 rails 应用程序,并且我还有设计控制器助手(从 Devise wiki 中获取,注意 user 默认参数):

module ControllerMacros
  module ControllerHelpers
    def sign_in(user=mock_model(User))
      if user.nil?
        request.env['warden'].stub(:authenticate!).
          and_throw(:warden, {:scope => :user})
        controller.stub :current_user => nil
      else
        # Lots of user.stub here
        controller.stub :current_user => user
      end
    end
  end

  RSpec.configure do |config|
    config.include Devise::TestHelpers, :type => :controller
    config.include ControllerHelpers, :type => :controller
  end
end

现在,当我在控制器测试的一个上下文中使用 sign_in 时,一切正常:

context "Authorized access" do
    before(:each) do
      mocked_user = mock_model(User)
      mocked_user.stub(:is?).with(:admin).and_return(true)
      sign_in(mocked_user)
      # some checks 
    end
end

但在另一种情况下(在同一规范中)我得到“参数数量错误(2 比 1)”:

context "Unauthorized access" do
 before(:each) do
   sign_in(nil)
 end

# test cases
end

这让我很困惑,因为我只传递了一个(nil)参数。我很高兴听到任何建议,因为这两个电话对我来说看起来一样。也许我错过了什么。

更新

  1. Rails 3.1.0
  2. ruby 1.9.3p0(2011-10-30 修订版 33570)
  3. RSpec 2.7.1

更新 2(错误示例):

 Failure/Error: sign_in(nil)
   ArgumentError:
   wrong number of arguments (2 for 1)
   # ./spec/support/controller_macros.rb:5:in `sign_in'
   # ./spec/controllers/forum/topics_controller_spec.rb:93:in `block (3 levels) in <top (required)>'

【问题讨论】:

  • 你能发布完整的错误信息吗?
  • 来自设计 wiki -“在撰写本文时,没有任何 gem 版本的 rspec-mocks 不支持 throw 参数,因此您需要同时使用 git 存储库(与 rspec 和rspec-rails 2.8.0.rc1)。” RSpec 2.8.0 前几天发布了

标签: ruby-on-rails ruby rspec devise


【解决方案1】:

错误将来自该行

request.env['warden'].stub(:authenticate!).and_throw(:warden, {:scope => :user})

低于 2.8 的 RSpec 版本不支持 and_throw 的参数。更新 Gemfile 以使用 RSpec 2.8.0 并告诉我你的进展情况。

我记得我在控制器测试中使用了一种更简单的方法

before do
  controller.stub(:authenticate!).and_return(mock_model('user'))
end

这样你就完全绕过了经过充分测试的设计

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2013-06-22
    相关资源
    最近更新 更多