在EdgeCase Ruby Koans上停留在about_methods.rb上

时间:2010-08-31 20:22:30

标签: ruby

我正在通过EdgeCase RubyKoans(www.rubykoans.com)进行攻击,并且我仍然坚持使用about_methods.rb here第35行开始的方法。运行rake可以预测失败并告诉我查看第36行。我有理由确定我的assert_match正确(“0 for 2”)但我不知道什么是失败的。 assert_raise(___)行很可能在括号之间有一些东西,但我不知道它应该是什么。任何提示或推动?非常感谢。

编辑:这是违规代码的简短代码:

def my_global_method(a,b)
 a + b
end

-snip -

def test_calling_global_methods_with_wrong_number_of_arguments
exception = assert_raise(___) do
  my_global_method
end
assert_match(/"0 for 2"/, exception.message)

exception = assert_raise(___) do
  my_global_method(1,2,3)
end
assert_match(/__/, exception.message)
end

5 个答案:

答案 0 :(得分:7)

尝试从正则表达式中删除引号:

assert_match(/0 for 2/, exception.message)

答案 1 :(得分:4)

exception = assert_raise(___) do

你应该用你希望引发的错误替换下划线。错误是一个对象 - 什么样的对象? 而zetetic说,正则表达式是不正确的。

答案 2 :(得分:1)

几个小时后,我找到了解决方法:

def test_calling_global_methods_with_wrong_number_of_arguments
    exception = assert_raise(ArgumentError) do
      my_global_method
    end
    myString = "wrong number of arguments (given 0, expected 2)"  
    assert_match(/#{Regexp.quote(myString)}/ , exception.message)

    exception = assert_raise(ArgumentError) do
      my_global_method(1,2,3)
    end
    myString = "wrong number of arguments (given 3, expected 2)"  
    assert_match(/#{Regexp.quote(myString)}/, exception.message)
end

答案 3 :(得分:0)

我刚做了测试,

当带括号的正则表达式时,你应该使用反斜杠,否则你会遇到nil。

def test_calling_global_methods_with_wrong_number_of_arguments
exception = assert_raise(ArgumentError) do
  my_global_method
end
assert_match(/wrong number of arguments \(0 for 2\)/, exception.message)

exception = assert_raise(___) do
  my_global_method(1,2,3)
end
assert_match(/__/, exception.message)

或只填充(o代表2)\

这两个词〜!

答案 4 :(得分:0)

挖掘错误信息后,这就是为什么在此练习之前,RubyKoan 教我们Regex。我忘了把 \ 放在 ( 之前。

这是我的答案;

def test_calling_global_methods_with_wrong_number_of_arguments
    exception = assert_raise(ArgumentError) do
      my_global_method
    end
    assert_match(/wrong number of arguments \(given 0, expected 2\)/, exception.message)

    exception = assert_raise(ArgumentError) do
      my_global_method(1,2,3)
    end
    assert_match(/wrong number of arguments \(given 3, expected 2\)/, exception.message)
  end