代码之家  ›  专栏  ›  技术社区  ›  Josh Hadik

如何使用rspec测试一个方法捕获一个符号?

  •  0
  • Josh Hadik  · 技术社区  · 6 年前

    如何测试方法在rspec中捕获抛出的符号?我有两种通过投掷和接球相互作用的方法。我已经想好了如何测试符号的一端是否被抛出:

    expect { subject.method_a }.to throw_symbol(:some_symbol)
    

    现在我想测试一下这个方法捕获抛出的符号,我想它可能看起来像这样:

    expect { subject.method_b }.to catch_symbol(:some_symbol)
    

    只是这样不行。所以我的问题是,如何测试一个方法在rspec中捕获一个符号?

    编辑:这里是method_a和method_ab的一个非常基本的例子,去掉了与当前问题无关的所有逻辑。

    def method_a 
      throw :some_symbol
    end
    
    def method_b
      catch :some_symbol do 
        method_a
      end
    end
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   max pleaner    6 年前

    catch throw 是内核上的方法,因此您可以像往常一样期望它们:

    class SomeClass
      def a
        throw :foo
      end
    
      def b
        catch :foo do
          a
        end
      end
    end
    
    RSpec.describe "" do
      it "" do
        inst = SomeClass.new
        expect(inst).to receive(:throw).with(:foo)
        inst.a
        expect(inst).to receive(:catch).with(:foo)
        inst.b
      end
    end