ruby rspec 和字符串比较

标签 ruby rspec

我不是 ruby​​ 专家,这可能看起来是个愚蠢的问题……但我对我在 RSpec 匹配器中发现的一个奇怪的东西(我认为)非常好奇,这个匹配器叫做 match。

您知道 match 接受字符串或正则表达式的输入。示例:

"test".should match "test" #=> will pass
"test".should match /test/ #=> will pass

当您在输入字符串中插入特殊的正则表达式字符时,奇怪的事情就开始了:

"*test*".should match "*test*" #=> will fail throwing a regex exception

这意味着(我认为)输入字符串被解释为正则表达式,那么我应该转义特殊的正则表达式字符以使其工作:

"*test*".should match "\*test\*" #=> will fail with same exception
"*test*".should match /\*test\*/ #=> will pass

从这个基本测试中,我了解到 match 将输入字符串视为正则表达式,但它不允许您转义特殊的正则表达式字符。

我说的对吗?这不是一个单一的行为吗?我的意思是,它是一个字符串或一个正则表达式!


回答后编辑:

跟随 DigitalRoss(右)回答以下测试通过:

"*test*".should match "\\*test\\*" #=> pass
"*test*".should match '\*test\*' #=> pass
"*test*".should match /\*test\*/ #=> pass

最佳答案

您看到的是字符串与正则表达式中反斜杠转义字符的不同解释。在软 (") 引号字符串中,\* 变为 *,但 /\*/ 实际上是一个反斜杠后跟一个星号。

如果您对字符串对象使用硬引号 (') 将反斜杠字符加倍(尽管仅适用于字符串),那么您的测试应该会产生相同的结果。

关于ruby rspec 和字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5772122/

相关文章:

ruby-on-rails - 如何使用 Factory girl 创建管理员角色?

ruby-on-rails - Rspec 测试在错误的环境中运行?

ruby-on-rails - 如何覆盖 Rails 中的 View

ruby-on-rails - 如何检查 'kind_of?' 到 'count' 或在 RSpec 'its' 功能内运行其他方法?

ruby-on-rails - 如何在 Rails 中获取随机记录?

ruby - 返回 Rails 中公共(public)字符数的函数

ruby - CSV 导入 : undefined method `path'

ruby - 识别独特的 block

ruby - Jekyll - 如何避免在 YAML frontmatter markdownify 项目上添加段落

ruby-on-rails - Rspec 测试应该通过但失败