ruby-on-rails 测试rspec中字符串数组中是否存在子字符串

yhived7q  于 2023-08-08  发布在  Ruby
关注(0)|答案(1)|浏览(100)
json[:errors] = ["Username can't be blank", "Email can't be blank"]

字符串
en.yml中的错误本身提供为:

username: "can't be blank",
email: "can't be blank"


测试:

expect(json[:errors]).to include t('activerecord.errors.messages.email')


失败是因为它正在查看字符串“Email can't be blank”,而“can't be blank”与它不匹配。
我的问题是,测试子字符串是否包含在数组json[:errors]中包含的字符串中的最佳方法是什么

v2g6jxz6

v2g6jxz61#

RSpec提供了一系列匹配器。在这种情况下,您需要使用include匹配器(docs)来检查数组的每个元素。你需要使用match正则表达式匹配器(docs)来匹配子字符串:

expect(json[:errors]).to include(match(/can't be blank/))

字符串
为了可读性,match正则表达式匹配器别名为a_string_matching,如下所示:

expect(json[:errors]).to include(a_string_matching(/can't be blank/))

更新:

我刚刚注意到OP的问题包含了一个数组,其中包含了多个匹配元素。包含匹配器检查数组的任何元素是否与条件匹配。如果需要检查数组的所有元素是否匹配条件,可以使用all matcher(docs)。

expect(json[:errors]).to all(match(/can't be blank/))

相关问题