2017-03-22 29 views
1

在RSpec的測試中,我使用鉤/標誌來運行測試的子集,類似於在examples爲什麼rspec過濾器鉤子只能使用箭頭語法?

# 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 

他們之間的區別是什麼導致一個工作,另一個失敗?

回答

2

你的第一個例子

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

創建了一個String作爲鍵的哈希值。然而,當您使用冒號語法,哈希將有一個符號鍵:

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

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

既然你特別不包括標有STRING關鍵指標,符號不匹配。

你可以改變你的rspec的配置,以

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

或繼續在規範使用字符串鍵。

作爲一個小小的文章腳本:在第一個示例中使用帶引號的字符串的冒號語法僅在Ruby 2.2後纔有效。較舊的Ruby版本會產生您在(編輯)問題中引用的語法錯誤。

相關問題