我习惯于打电话,如:
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
但是当它失败时会发出非常糟糕的消息。
有什么想法吗?
答案 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