使用assert_match验证多个字符串是否处于必需的顺序

时间:2015-01-13 03:52:00

标签: ruby-on-rails capybara minitest

如何使用assert_match

验证字符串的顺序
assert_match /string_1.*string_2.*string_3/, page.html
即使string_1string_2string_3在页面中显示的顺序相同,

也会失败。

2 个答案:

答案 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