很难找到关于摩卡的任何文件,所以我担心我在这里完全在海上。我发现传递参数的存根方法存在问题。例如,如果我设置了这样一个类:
class Red
def gets(*args)
@input.gets(*args)
end
def puts(*args)
@output.puts(*args)
end
def initialize
@input = $stdin
@output = $stdout
end
private
def first_method
input = gets.chomp
if input == "test"
second_method(input)
end
end
def second_method(value)
puts value
second_method(value)
end
end
是的,它是设计的,但它是一个简化的想法,你可能有一个你不想在测试中调用的方法。
所以我可能会写一个测试,例如:
setup do
@project = Red.new
@project.instance_variable_set(:@input, StringIO.new("test\n"))
@project.stubs(:second_method)
end
should "pass input value to second_method" do
@project.expects(:second_method).with("test").once
@project.instance_eval {first_method}
end
现在我希望这会通过。但相反,我得到了这个相当神秘的错误信息:
Errno::ENOENT: No such file or directory - getcwd
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `expand_path'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `block in filtered'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `reject'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `filtered'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/expectation_error.rb:10:in `initialize'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/mockery.rb:53:in `new'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/mockery.rb:53:in `verify'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/api.rb:156:in `mocha_verify'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/integration/mini_test/version_131_and_above.rb:27:in `run'
这对我来说绝对没有任何意义,除了Mochas肠道深处的某些东西已经铿锵有力。如果我在没有参数传递给第二种方法的情况下编写相同类型的测试,我就没有问题。我错过了什么吗?
答案 0 :(得分:0)
我认为应该是应该导致问题的原因。我使用test / unit,一切似乎都没问题。
require 'rubygems' require "test/unit" require 'mocha' require File.dirname(__FILE__) + '/../src/red' class RedTest < Test::Unit::TestCase def setup @project = Red.new @project.instance_variable_set(:@input, StringIO.new("test\n")) @project.stubs(:second_method) end def test_description_of_thing_being_tested @project.expects(:second_method).with("test").once @project.instance_eval {first_method} end end
给出以下输出:
stephen@iolanta:~/tmp/red/test # ruby red_test.rb Loaded suite red_test Started . Finished in 0.000679 seconds. 1 tests, 1 assertions, 0 failures, 0 errors stephen@iolanta:~/tmp/red/test #
答案 1 :(得分:0)
抱歉 - 我刚看到这个。最好在Lighthouse向我们提交错误报告。你找到了什么文件?你见过RDoc on Rubyforge吗?您找不到哪种文件?
我一直无法重现你的错误。什么版本的Ruby,Rubygems,Shoulda&amp;你正在使用摩卡?
您可以在this Gist中看到我运行测试的结果。