为什么rspec过滤器钩子只能使用箭头语法?

时间:2017-03-22 18:55:36

标签: ruby testing rspec automated-tests

在RSpec测试中,我使用钩子/标志来运行测试子集,类似于examples

中显示的内容
# spec_helper.rb
RSpec.configure do |c|
  c.filter_run_excluding('broken')
end

此语法有效

# my_spec.rb
describe 'broken test', 'broken' => true do
  ...
end

此语法失败,错误为syntax error, unexpected ':', expecting end-of-input

# my_spec.rb
describe 'broken test', 'broken': true do
  ...
end

导致一个人工作而另一个人失败的他们之间有什么区别?

1 个答案:

答案 0 :(得分:2)

你的第一个例子

{'broken' => true}
# => {"broken" => true}

创建一个以字符串为键的哈希。但是,当您使用冒号语法时,散列将具有符号键:

{'broken': true} # This is only valid syntax since Ruby 2.2
# => {:broken => true}

{broken: true}
# => {:broken => true}

由于您明确排除了标有字符串键的规格,因此符号不会匹配。

您可以将rspec配置更改为

RSpec.configure do |c|
  c.filter_run_excluding(:broken)
end

或继续在规范中使用字符串键。

作为一个很小的帖子脚本:你在第一个规范示例中使用的带有引号字符串的冒号语法仅在Ruby 2.2之后才有效。较旧的Ruby版本会产生您在(编辑过的)问题中引用的语法错误。