使用 ActiveRecord::Relation 时的 RSpec 匹配器

2024-05-22

所以这是我要测试的方法:

def self.by_letter(letter)
  where("lastname LIKE ?", "#{letter}%").order(:lastname)
end

简单问一下,#{letter} 后面的百分号到底有什么作用?跟格式化有关系吗?

这是测试该方法的规范的一部分:

    context 'method "by_letter"' do
    it 'returns and ordered list by letter' do
      theon = Contact.create!(
        firstname: "Theon", 
        lastname: "Greyjoy", 
        email: "[email protected] /cdn-cgi/l/email-protection"
        )
      rob = Contact.create!(
       firstname: "Rob", 
       lastname: "Stark", 
       email: "[email protected] /cdn-cgi/l/email-protection" 
       )
      tyrion = Contact.create!(
       firstname: "Tyrion", 
       lastname: "Lannister", 
       email: "[email protected] /cdn-cgi/l/email-protection" 
       )
      result = Contact.by_letter("S")
      expect(result).to include("Snow")
    end
  end

这是运行所述测试后得到的输出日志(哦,请记住,在规范的前面,我创建了一个“Jon Snow”,他应该按字母顺序出现在“Stark”之前):

    Failures:

  1) Contact method "by_letter" returns and ordered list by letter
     Failure/Error: expect(result).to include("Snow")
       expected #<ActiveRecord::Relation [#<Contact id: 1, firstname: "Jon", lastname: "Snow", email: "[email protected] /cdn-cgi/l/email-protection", created_at: "2014-11-14 17:17:55", updated_at: "2014-11-14 17:17:55">, #<Contact id: 3, firstname: "Rob", lastname: "Stark", email: "[email protected] /cdn-cgi/l/email-protection", created_at: "2014-11-14 17:17:56", updated_at: "2014-11-14 17:17:56">]> to include "Snow"
       Diff:
       @@ -1,2 +1,3 @@
       -["Snow"]
       +[#<Contact id: 1, firstname: "Jon", lastname: "Snow", email: "[email protected] /cdn-cgi/l/email-protection", created_at: "2014-11-14 17:17:55", updated_at: "2014-11-14 17:17:55">,
       + #<Contact id: 3, firstname: "Rob", lastname: "Stark", email: "[email protected] /cdn-cgi/l/email-protection", created_at: "2014-11-14 17:17:56", updated_at: "2014-11-14 17:17:56">]

我缺少什么?我的测试不应该通过吗,因为我返回了一个包含我指定的字符串的集合?是否存在一些复杂性,因为它不是常规数组而是某种代理数组?我需要做什么才能通过测试?


Your result is an ActiveRecord::Relation目的。所以你应该这样做:-

expect(result).to include(rob)

rob姓氏为"Stark", thus Contact.by_letter("S")会包括rob in the filtered list.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ActiveRecord::Relation 时的 RSpec 匹配器 的相关文章

  • 如何将html id添加到rails中的form_for标签中?

    我正在尝试将 id 标签添加到我在 Rails 中创建的表单中 表单的开头有以下代码 我是否可以向 form for 嵌入式 ruby 添加一个 id 或者我是否必须创建一个 form tag 字段并在那里添加 id 如果我必须创建 for
  • 在 Rails 中呈现路由错误的 404 页面

    我试图在 Rails 中渲染集成的 404 页面作为例外 我尝试了这个 但仍然收到路由错误页面 posts controller rb def destroy if current user username post email post
  • 轨道上的下一个对象问题

    视频影像 表 id title votes count 视频影像 控制器 def show video Video find params id next video Video order votes count DESC where v
  • Ruby on Rails:Cucumber:如何点击打开新窗口的链接?

    我有一个在新窗口中打开的链接 我需要测试该新窗口中的应用程序部分 任何建议将不胜感激 定义一个包含以下代码的步骤 page driver browser switch to window page driver browser window
  • 一对一的DataMapper关联

    我对 DataMapper 非常陌生 我正在尝试为以下场景创建模型 我有许多用户 有用户名 密码等 他们也可以是玩家或裁判员或两者兼而有之 因此单表继承不是一个选项 基本模型是 class User include DataMapper R
  • 带有 @global gem 的 Ruby/RVM - 捆绑包运行失败并显示“require”:无法加载此类文件 - 捆绑器 (LoadError)

    我学习了linux 1个月 当我试图使所有步骤从在 Heroku 上从 MySQL 迁移到 Postgres https devcenter heroku com articles heroku mysql我遇到了一个无法处理的错误 当我尝
  • db:schema:load 与 db:migrate 使用 capistrano

    我有一个 Rails 应用程序 我正在将其移动到另一台服务器 我认为我应该使用 db schema load 来创建 mysql 数据库 因为这是推荐的 我的问题是我正在使用 capistrano 进行部署 并且它似乎默认为 rake db
  • 覆盖 Sinatra 默认的 NotFound 错误页面

    有没有办法覆盖 sinatra 默认的 NotFound 错误页面 Sinatra 不知道这个小曲 我希望 sinatra 在未找到正确的路由时仅将纯字符串显示为 未找到方法 但是当我从路由内部引发 404 错误时 我希望它显示传入的错误消
  • ruby 管道、IO 和 stderr 重定向

    我希望有一个 ruby 程序 一个 rake 任务 观察另一个 rake 任务的输出 输出写入器输出到 stderr 我想读一下这些行 我很难设置它 如果我有一个作家 stdout writer rb 不断打印一些东西 usr bin en
  • Yii2 修改 Model search() 中的 find() 方法

    我试图修改模型搜索中的 find 方法 但它抛出错误 必须设置数据提供程序属性 这是我的搜索模型 public function search params userID Yii app gt user gt identity gt id
  • 为什么我需要 Nginx 和 Puma?

    我正在将 Rails 应用程序部署到生产环境中 看起来 Puma 速度很快 可以处理我想要在网络服务器中完成的许多事情 我想知道我是否需要使用 Nginx 如果只使用 Puma 我会错过什么 Nginx 是一个 Web 服务器 puma 是
  • Rails Active Storage - 保留现有文件/上传吗?

    我有一个 Rails 模型 has many attached files 默认情况下 通过 Active Storage 上传时 如果您上传新文件 它会删除所有现有上传内容并将其替换为新文件 我有一个控制器破解 由于多种原因 它不太理想
  • 为什么包含此模块不会覆盖动态生成的方法?

    我试图通过包含一个模块来覆盖动态生成的方法 在下面的示例中 Ripple 关联添加了rows 方法表 我想调用该方法 但之后还要做一些额外的事情 我创建了一个模块来重写该方法 认为该模块的row 可以打电话super使用现有的方法 clas
  • 为什么 Rails 应用程序在底部显示数据库信息?

    我创建了一个博客 每当我添加帖子时 帖子索引页面底部总会显示数据库中的记录列表 home html erb 像这样
  • 通过 SO_RCVTIMEO 套接字选项在 Ruby 中设置套接字超时

    我试图通过 SO RCVTIMEO 套接字选项在 Ruby 中设置套接字超时 但它似乎对任何最近的 nix 操作系统都没有影响 使用 Ruby 的 Timeout 模块不是一个选择 因为它需要为每个超时生成和连接线程 这可能会变得昂贵 在需
  • RSpec 2 中使用 OR 相等

    下面这个例子的正确写法是什么 玩家的分数应等于 5 或 8 it should equal 5 or 8 do player score should 5 or 8 end Thanks Tim 5 or 8将始终产生结果 5 并且不会执行
  • ubuntu 12.04 ruby​​ 2.0 Rails:找不到“thread_safe”

    我正在 ubuntu 12 04 上安装 Rails 使用以下方法手动安装 如何在 Ubuntu 12 04 上正确安装 ruby 2 0 0 https stackoverflow com questions 16222738 how t
  • 用于 S3 私有文件的 ActiveStorage

    到目前为止 我一直在使用 Paperclip 将一些文件上传到 S3 其中一些文件不是公开的 Paperclip 允许通过以下位将一些文件作为私有文件上传 has attached file image styles large 2000x
  • 对范围值进行排序

    我想对表示数值范围的字符串数组进行排序 如下所示 b 0 5 100 250 5 25 50 100 250 500 25 50 使用sort我得到的方法 b sort gt 0 5 100 250 25 50 250 500 5 25 5
  • Rails 中的助手 - 构建 html 字符串时的最佳方法是什么?

    我通常这样写助手 def bloco vazio texto btn args titulo content tag h3 Vazio p content tag p texto content tag div titulo tag hr

随机推荐