代码之家  ›  专栏  ›  技术社区  ›  Chris Bunch

Ruby-FlexMock Backticks方法

  •  3
  • Chris Bunch  · 技术社区  · 16 年前

    我有一个Ruby代码,它在很多地方使用了backticks,我想对它进行测试。我正在使用 FlexMock 想以某种方式嘲笑这种方法。我知道方法很简单 Kernel, :` 但似乎无法让它与FlexMock一起工作。你会怎么做?下面是我想测试的一个方法示例:

    def foo
      result = `ls`
      if result.to_a.length > 0
        true
      else
        false
      end
    end
    
    3 回复  |  直到 16 年前
        1
  •  3
  •   Chris Bunch    16 年前

    因此,ButTink方法具体地映射到内核。”这是很好的,直到人们查看FrimoCK源来查看他们认为是什么有效的方法名称。他们使用的正则表达式本质上是用什么来检查字母数字?或最后,backtick与这个正则表达式不匹配。

    在内部更改代码可以解决引发的初始异常,但实际上不会使代码按预期工作。我可以按照pierr的建议对其进行MonkeyPatch,但这在我的测试代码中是非常重复的,所以我选择了另一种方法,在我的库代码中创建了一个shell方法,它只做反勾号。然后,可以按照所需的方式模拟这个方法,因为我只在少数地方使用backtick,所以我的底层代码不需要更改很多。

        2
  •  1
  •   Community Mohan Dere    9 年前

    我对flexmock一无所知,但你可能想看看 this .

        3
  •  0
  •   Daniel Cukier    16 年前

    你应该打电话

    Kernel.` "cmd" 
    

    而不是使用

      `cmd` 
    

    it "should call system ls" do
      Kernel.should_receive(:`).with("ls")
      Kernel.` "ls"
    end
    

    本例使用纯rspec

    推荐文章