我的测试中存在问题。
我有这个规格:
context 'when no section is supplied' do
it 'raises an ArgumentError regarding the missing section_id argument' do
expect do
described_class.with_section
end.to raise_error(ArgumentError)
.with_message /wrong number of arguments \(given 0\, expected 1\)/
end
end
在某些环境中,消息为:
ArgumentError: wrong number of arguments (0 for 1)
在其他环境中,消息为:
ArgumentError: wrong number of arguments (given 0, expected 1)
所以我有一个测试通过我的Mac并在另一台计算机上失败。
我该如何解决这个问题?
答案 0 :(得分:2)
差异似乎是由于正在运行测试的Ruby版本。 Ruby 2.2及更早版本使用类似
的消息报告此错误"ArgumentError: wrong number of arguments (0 for 1)"
Ruby 2.3使用类似
的消息报告此错误"ArgumentError: wrong number of arguments (given 0, expected 1)"
(这更容易理解)。
为大多数应用程序解决此问题的正确方法是在开发和/或部署程序的所有计算机上运行相同版本的Ruby。使应用程序在多个主要版本的Ruby上运行意味着在这些版本上测试它,这意味着在每个开发人员机器上都有所有支持的版本,这比在一个版本上安装更多。这也意味着在新版本的Ruby中放弃好东西。
如果你真的需要你的程序与多个版本的Ruby兼容,你可以测试RUBY_VERSION
常量:
context 'when no section is supplied' do
it 'raises an ArgumentError regarding the missing section_id argument' do
message = RUBY_VERSION.start_with? '2.3' \
? "wrong number of arguments (given 0, expected 1)" \
: "wrong number of arguments (0 for 1)"
expect { described_class.with_section }.to raise_error(ArgumentError).
with_message /#{Regexp.escape message}/
end
end
答案 1 :(得分:1)
为什么不这样做:
.with_message /wrong number of arguments \((0 for 1|given 0, expected 1)\)/