Rspec支持组成匹配器。它提供的组成匹配器列表如下:
all(matcher)
include(matcher, matcher)
start_with(matcher)
end_with(matcher)
contain_exactly(matcher, matcher, matcher)
match(matcher)
change {}.from(matcher).to(matcher)
change {}.by(matcher)
所有组成的匹配器都很直观。您可以将匹配器传递给组成匹配器,并且传递的匹配器必须返回true才能使期望为真:
expect(@items).to all(be_visible & be_in_stock)
但是我不确定组成匹配器的start_with和end_with。看这个例子:
fruits = ['apple', 'banana', 'cherry']
expect(fruits).to start_with( start_with('a') )
在此示例中,外部start_和内部start_做什么?
答案 0 :(得分:1)
在您的示例中,您正在测试fruits
的第一个元素以字符a
开头。因此,外部starts_with
定位到数组的第一个元素,而内部starts_with
定位到第一个元素的开始。
您的示例通过了,但是例如失败了:
fruits = ['banana', 'apple', 'cherry']
expect(fruits).to start_with( start_with('a') )
rspec-expectations tests数组中有几个示例,您需要测试第一个元素是否以给定值或字符串开头或结尾。例如:
expect([1.01, "food", 3]).to start_with(a_value_within(0.2).of(1), a_string_matching(/foo/))
expect([3, "food", 1.1]).to end_with(a_value_within(0.2).of(1))
也相关:RSpec starts_with matcher variant using regular expressions