ruby-on-rails - RSpec:通过正则表达式匹配字符串数组

标签 ruby-on-rails ruby rspec

我正在使用 rspec 测试我的模型的验证,并期待一条错误消息。但是,消息的确切文本可能会发生变化,所以我想更宽容一点,只检查部分消息。

由于 Spec::Matchers::include 方法只适用于字符串和集合,我目前正在使用这个结构:

@user.errors[:password].any?{|m|m.match(/is too short/)}.should be_true

这可行,但对我来说似乎有点麻烦。是否有更好(即更快或更像 ruby​​)的方法来检查数组是否包含正则表达式的字符串,或者是否有一个 rspec 匹配器可以做到这一点?

最佳答案

我会推荐做

@user.errors[:password].to_s.should =~ /is too short/

很简单,因为它会在失败时给你一个更有帮助的错误。如果你使用 be_any 那么你会收到这样的消息......

Failure/Error: @user.errors[:password].should be_any{ |m| m =~ /is too short/}
    expected any? to return true, got false

但是,如果您使用 to_s 方法,那么您将得到如下内容:

 Failure/Error: @user.errors[:password].to_s.should =~ /is too short/
   expected: /is to short/
        got: "[]" (using =~)
   Diff:
   @@ -1,2 +1,2 @@
   -/is too short/
   +"[]"

因此您可以看到失败的原因,而不必深入挖掘以找出失败的原因。

关于ruby-on-rails - RSpec:通过正则表达式匹配字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4146016/

相关文章:

ruby-on-rails - ruby rails : Search form

ruby-on-rails - Heroku db pull 错误,它正在寻找 sqlite3 但我有 postgres,如何更改它?

ruby-on-rails - rails 3.1 : how to run an initializer only for the web app (rails server/unicorn/etc)

ruby-on-rails - 这个 rails 查询到底是如何工作的?

ruby-on-rails - Rails 完整引擎路线未加载到 Rails 4 应用程序中

ruby-on-rails - 为什么我的 rspec 测试失败?

ruby-on-rails - ruby 中的哈希和函数参数

ruby-on-rails - 为什么 spec_helper 有这个 ENV ["RAILS_ENV"] ||= "test"?

ruby-on-rails - RailsApp 帮助 Rspec 教程 未定义的方法

ruby - 为什么 ruby​​-debug 不允许我在规范中查看局部变量?