如何使用assert_match
验证字符串的顺序assert_match /string_1.*string_2.*string_3/, page.html
即使string_1
,string_2
和string_3
在页面中显示的顺序相同,也会失败。
答案 0 :(得分:2)
问题可能是“string_1”,“string_2”和“string_3”在不同的行上。
在正则表达式中,点(.
)匹配除换行符之外的任何单个字符。如果三个字符串在同一行上(即中间没有换行符),您将看到匹配有效:
html = '<div>string_1</div><div>string_2</div><div>string_3</div>'
p html.match(/string_1.*string_2.*string_3/)
#=> #<MatchData "string_1</div><div>string_2</div><div>string_3">
但是,如果字符串分为多行(即中间有换行符),则不会匹配:
html = '<div>string_1</div>
<div>string_2</div>
<div>string_3</div>'
p html.match(/string_1.*string_2.*string_3/)
#=> nil
要使点也与换行符匹配,请通过在末尾添加m
来启用多行选项:
html = '<div>string_1</div>
<div>string_2</div>
<div>string_3</div>'
p html.match(/string_1.*string_2.*string_3/m)
#=> #<MatchData "string_1</div>\n\t<div>string_2</div>\n\t<div>string_3">
换句话说,断言可能需要使用多行选项:
assert_match /string_1.*string_2.*string_3/m, page.html
答案 1 :(得分:1)
我刚试了以下......
视图:
string_1string_2string_3
试验:
assert_match /string_1.*string_2.*string_3/, page.html
这过去了。
我不确定是什么给你一个问题。当然除非string_1
等等是变量名,而不是字面上你要搜索的内容。然后测试代码应该使用插值:
# Example variables with string values
string_1 = "alpha"
string_2 = "beta"
string_3 = "charlie"
# Using the variables in the regex via interpolation
assert_match /#{string_1}.*#{string_2}.*#{string_3}/, page.html