使用“应该”类方法?

时间:2009-08-07 09:22:52

标签: ruby rspec

我习惯于打电话,如:

new_count.should eql(10)

关于变量,但我怎样才能使用File.directory?(my_path)等类方法做类似的事情?

我试过的File.should be_directory(my_path)的每个组合都会导致缺少一个方法,因为Ruby试图在我当前的对象上找到“be_directory”,而不是将它与File匹配。

我知道我可以转过身来写

File.directory?(my_path).should == true

但是当它失败时会发出非常糟糕的消息。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

嗯,也许我有个主意。

File是Ruby本身的一部分,所以它可能有用C语言编写的元素。一些Ruby的元编程工具在处理从C导入的类时会崩溃,这可以解释Rspec无法生成{{1按预期行事。

如果这是真的,那么这里没有真正的解决方案。我建议使用MockFS库:

MockFS的这个缺点是在你通常使用File,Dir和FileUtils的任何地方使用它:

.should

好处,特别是如果您的代码是文件密集型的,能够指出真正复杂的场景,并让它们在没有实际触及慢速文件系统的情况下运行。一切都发生在记忆中。更快,更完整的规格。

希望这有帮助,祝你好运!

答案 1 :(得分:0)

我不确定为什么be_directory不适合你。您使用的是什么版本的rspec?当谓词存在时,您也可以使用rspec的predicate_matchers方法,但它不能很好地读取be_predicate

这是我试过的:

describe File, "looking for a directory" do

  it "should be directory" do
    File.should be_directory("foo")
  end

  predicate_matchers[:find_the_directory_named] = :directory?
  it "should find directory" do
    File.should find_the_directory_named("foo")
  end

end

这给了我以下输出(使用spec -fs spec.rb运行):

File looking for a directory
- should be directory
- should find directory

Finished in 0.004895 seconds

2 examples, 0 failures