Rspec:如何测试子串在字符串中出现一定次数?

big*_*ato 8 rspec ruby-on-rails

试图使用该.exactly方法,但它似乎不起作用.

expect(data).to include(purchase.email).exactly(3).times
Run Code Online (Sandbox Code Playgroud)

这会产生错误:

 NoMethodError:
   undefined method `exactly' for #<RSpec::Matchers::BuiltIn::Include:0x007f85c7e71108>
 # ./spec/models/csv_generator_spec.rb:34:in `block (4 levels) in <top (required)>'
 # ./spec/models/csv_generator_spec.rb:18:in `each'
 # ./spec/models/csv_generator_spec.rb:18:in `block (3 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

有谁知道我会如何测试子字符串在字符串中出现一定次数?

fiv*_*git 11

您可以使用该scan方法返回匹配数组.然后你只需检查数组的大小:

expect(data.scan(purchase.email).size).to eq(3)
Run Code Online (Sandbox Code Playgroud)

另一种方法是这种语法:

expect(data.scan(purchase.email)).to have(3).items

expect(data.scan(purchase.email)).to have_exactly(3).items
Run Code Online (Sandbox Code Playgroud)