代码之家  ›  专栏  ›  技术社区  ›  John Topley

如何使用RSpec测试无效参数是否引发ArgumentError异常?

  •  13
  • John Topley  · 技术社区  · 16 年前

    我在写一个可以提高 ArgumentError 如果提供给其单个方法的参数无效。如何使用RSpec为此编写测试?

    下面的示例显示了我所想到的实现类型。这个 bar 方法需要一个布尔参数( :baz

    module Foo
      def self.bar(options = {})
        baz = options.fetch(:baz, true)
        validate_arguments(baz)
      end
    
      private
      def self.validate_arguments(baz)
        raise(ArgumentError, ":baz must be a boolean") unless valid_baz?(baz)
      end
    
      def self.valid_baz?(baz)
        baz.is_a?(TrueClass) || baz.is_a?(FalseClass)
      end
    end
    
    3 回复  |  直到 16 年前
        1
  •  30
  •   Ragmaanir    16 年前

    我使用了类似于JHurra发布的内容:

    it "should raise ArgumentError for arguments that are not boolean" do
      expect{ Foo.validate_arguments(nil) }.to raise_error(ArgumentError)
    end
    

    不需要别名(rspec1.3)。

        2
  •  3
  •   JHurrah    16 年前
    it "should raise ArgumentError for arguments that are not boolean" do
      lambda{ Foo.validate_arguments(something_non_boolean) }.should raise_error(ArgumentError)
    end
    
        3
  •  2
  •   Theo    16 年前

    除非对非布尔值抛出异常非常重要,否则我认为将值强制为布尔值(例如使用 !!

    baz = !! options.fetch(:baz, true)
    

    baz = options.fetch(:baz, true) ? true : false !! 不清楚。

    推荐文章