我正在通过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
答案 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