使用 Faraday 和 Rspec 进行存根

2023-12-30

我有一个看起来像这样的模型:

class Gist
    def self.create(options)
    post_response = Faraday.post do |request|
      request.url 'https://api.github.com/gists'
      request.headers['Authorization'] = "Basic " + Base64.encode64("#{GITHUB_USERNAME}:#{GITHUB_PASSWORD}")
      request.body = options.to_json
    end
  end
end

和一个如下所示的测试:

require 'spec_helper'

describe Gist do
  context '.create' do
    it 'POSTs a new Gist to the user\'s account' do
      Faraday.should_receive(:post)
      Gist.create({:public => 'true',
                   :description => 'a test gist',
                   'files' => {'test_file.rb' => 'puts "hello world!"'}})
    end
  end
end

不过,这个测试并不能真正令我满意,因为我正在测试的只是用 Faraday 进行一些 POST,但我实际上无法测试 URL、标头或正文,因为它们是通过一个块。我尝试使用 Faraday 测试适配器,但我也没有看到任何测试 URL、标头或正文的方法。

有没有更好的方法来编写我的 Rspec 存根?或者我是否能够以某种我无法理解的方式使用法拉第测试适配器?

Thanks!


我的朋友@n1kh1l 向我指出了and_yieldRspec 方法和这个帖子 https://stackoverflow.com/questions/12641631/rspec-use-test-double-as-block-argument这让我可以像这样编写测试:

require 'spec_helper'

describe Gist do
  context '.create' do
    it 'POSTs a new Gist to the user\'s account' do
      gist = {:public => 'true',
              :description => 'a test gist',
              :files => {'test_file.rb' => {:content => 'puts "hello world!"'}}}

      request = double
      request.should_receive(:url).with('https://api.github.com/gists')
      headers = double
      headers.should_receive(:[]=).with('Authorization', "Basic " + Base64.encode64("#{GITHUB_USERNAME}:#{GITHUB_PASSWORD}"))
      request.should_receive(:headers).and_return(headers)
      request.should_receive(:body=).with(gist.to_json)
      Faraday.should_receive(:post).and_yield(request)

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

使用 Faraday 和 Rspec 进行存根 的相关文章

  • Rails 模型测试 - 模拟与工厂

    Rails 测试模拟对象与使用工厂对象的最佳实践是什么 应该嘲笑only当模型可能转到外部源时使用 或者 您是否仅在测试实际模型并使用模拟来处理其他所有内容时才使用工厂 例如 如果我们有一个包含客户和订单的销售系统 那么当我们测试客户模型时
  • 使用 RSpec 请求规范授权请求时,access_token 无效

    我正在尝试测试CredentialsController 使用 RSpec 请求规范在生产中运行良好 Code 控制器 class CredentialsController lt ApplicationController before
  • 如何对 Google API 调用进行单元测试

    我有一个以下方法 它从 Google Analytics 检索访问次数最多的页面 public function getData limit 10 ids 12345 dateFrom 2011 01 01 dateTo date Y m
  • Capybara 2.0 和 rspec-rails -- 助手在规范/功能中不起作用

    我正在尝试使用辅助模块中的方法 但 rspec 似乎无法识别辅助程序以进行测试spec features 请注意 唯一的更改是spec helper rb正在添加require capybara rspec 我尝试移动helper rb t
  • 在 Jest 测试中设置时刻时区

    我有 util 函数 它以特定的日期格式解析给定的日期 即 2019 01 28 然后使用momentJS检索当天的开始并将其转换为 ISO 日期格式 dates js import moment from moment export co
  • Rails:测试需要访问 Rails 环境的助手(例如 request.fullpath)

    我有一个可以访问的助手request fullpath 在孤立的辅助测试中 request不可用 我应该怎么办 我可以以某种方式嘲笑它或类似的东西吗 我正在使用最新版本的 Rails 和 RSpec 这是我的助手的样子 def item a
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • 为什么我不能在 super() 调用周围使用 try 块?

    因此 在 Java 中 构造函数的第一行必须是对 super 的调用 无论是隐式调用 super 还是显式调用另一个构造函数 我想知道的是 为什么我不能在它周围放置一个 try 块 我的具体情况是我有一个模拟课程用于测试 没有默认的构造函数
  • 如何使用 sinon/mocha 模拟 npm 模块

    我正在尝试测试调用该模块的函数cors 我想测试一下cors会被称为 为此 我必须存根 模拟它 这是函数 cors js const cors require cors const setCors gt cors origin http l
  • 即使路由存在,Rspec 命名空间路由规范也会失败

    我在用着rspec rails 2 8 1 and 导轨3 1 3 我正在尝试测试 Admin ZonesController 的路由 我已经通过运行验证了浏览器中存在该路由rake routes 我没有使用 ActiveRecord 如果
  • 更改 WireMock __files 目录

    来自docs http wiremock org docs stubbing 要从文件中读取正文内容 请将文件放在 files 下 目录 默认情况下 这应该位于 src test resources 下 从 JUnit 规则运行时 当独立运
  • 从 RSpec 迁移到 Minitest::Spec?

    是否有可遵循的策略或一组步骤来从 RSpec 2 迁移到MiniTest Spec 我想考虑为一个大型项目执行此操作 但我不知道从哪里开始 我已经很久没有使用 MiniTest Spec 了 我正在自己移植一些测试 但以下是我从 RSpec
  • Capybara::ElementNotFound:无法找到字段“标题”

    我无法解决这个问题 请帮我 它给了我找不到元素的错误 规格 功能 todos create spec rb require spec helper describe Creating todos do let user FactoryGir
  • Python - 对象 MagicMock 不能在“await”表达式中使用

    当我尝试使用 MagicMock 在单元测试中模拟异步函数时 出现以下异常 类型错误 对象 MagicMock 不能在 await 表达式中使用 示例代码如下 source code class Service async def comp
  • 如何清除 ruby​​ 中 rspec 测试之间的类变量

    我有以下课程 我想确保类 url 只为所有实例设置一次 class DataFactory url nil def initialize begin if url nil Rails logger debug Setting url url
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • NoMethodError:Mocha 和 Rails 3 未定义方法“模拟”

    我尝试在 Rails 3 项目中使用 mocha 但不断收到以下异常 NoMethodError undefined method mock for
  • Capybara 无法从 Stripe 中找到表单字段?

    我正在学习 Ruby on Rails 并且正在开发一个使用 stripe 创建高级帐户的应用程序 另外 我正在使用 Rspec 和 Capybara 进行集成测试 require spec helper feature user upgr
  • 具有多个输入的单元测试

    我一直在尝试进行单元测试 并且正在尝试处理一个函数的单元测试 该函数的返回值取决于一堆参数 不过信息量有点大 有点让人不知所措 考虑以下 我有课Article 其中有价格集合 它有一个方法GetCurrentPrice它根据一些规则确定当前
  • 如何替换被测模块的文件访问引用

    pyfakefs https code google com p pyfakefs 听起来非常有用 它 最初是作为核心 Python 模块的一个适度的假实现来开发的 以支持中等复杂的文件系统交互 并于 2006 年 9 月在 Google

随机推荐

  • 无法将 SQL 插入到一个特定表中

    所以在过去的三个小时里我一直在尝试将 sql 插入到这个特定的表中 我想我开始发疯了 我已经隔离了我认为可能是问题的事情 但如果您想了解更多信息 请随时询问 本质上我目前有两个 sql 表 concepts and FUideas 我对此感
  • 访问 Xamarin.iOS Settings.Bundle?

    我已经尝试了很长一段时间来寻找一个应该非常简单的问题的解决方案 我想要的是在应用程序未运行时可以在 iPhone 设置菜单中编辑的变量 基本上是一个包含在 iOS GUI 中的配置文件 这应该是iOS中的内置功能 虽然我可以找到一些与之相关
  • UISegmentedcontrol 在 UITabbarcontroller 中切换视图

    我正在尝试使用在多个不同视图之间切换UISegmentedControl 我找到了一个非常好的例子来做到这一点 http redartisan com 2010 6 27 uisegmented control view switching
  • Visual Studio 监视窗口中的“非公共成员”节点显示什么?

    我假设 C 对象的所有非公共 即私有 受保护 内部和内部受保护 成员都位于 非公众会员 当我在 Visual Studio 观察窗口中查看对象时 但是随后 我注意到以下代码存在异常 class HashDerived System Secu
  • jQuery 中窗口和文档的区别

    我想知道两者之间有什么区别document window在 jQuery 中 这两个经常被使用 但我一直不明白它们之间的区别 唷 这实际上是一个比您想象的要大得多的问题 The 极短的答案是 The window对象代表容器document
  • MySQL 错误 1005:无法创建表(错误号:150)

    我正在尝试创建下表 create table messaInScena data date ora time spazio varchar 20 spettacolo varchar 40 postiDisponibili smallint
  • 我应该从 MooTools 转换为 jQuery 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 服务器无法验证请求。确保授权标头的值格式正确,包括签名

    我注意到我的计算机时区设置为 UTC 08 00 Pacific Time US Canada 所以我把它改为 UTC 08 00 Kuala Lumpur Singapore 然后当我打开 Azure 存储资源管理器时 它显示以下错误 我
  • 确定焦点事件:单击或制表符

    如果焦点是在单击事件或 tabstop 上触发的 如何确定 jQuery 上的焦点事件 我有这个焦点事件 如果焦点是由制表符触发的 我将执行某些操作 如果是单击 我将不会执行它 这是一个伪代码 a focus function if Thi
  • ORM 有何伟大之处?

    所以我的头靠在墙上 希望有人能来帮忙 要么把墙移走 要么阻止我的头移动 在过去的 3 4 周中 我一直在调查 ORM 是否为新项目做好了准备 ORM 必须映射到现有的大型且老化的 SQL 数据库 所以我尝试了亚音速 我真的很喜欢 v2 和
  • 如何使非模态对话框窗口始终位于最前面?

    我正在使用一个实例Dialog 在我的应用程序中显示一个小控制器窗口 用户可以与之交互以影响主窗口中的功能 有点像远程控制 我可以使这个对话框模式化 modality Qt WindowModal or modality Qt Applic
  • spring请求参数如何转换

    在基于 Spring 3 的 Web portlet 应用程序中 我有一个控制器 其方法如下 RenderMapping public ModelAndView handleRenderRequest RequestParam MyClas
  • Highcharts如何使用JavaScript变量作为系列数据源?

    我正在运行一个 asp net 代码隐藏 它创建一个字符串变量 该变量保存由逗号分隔的浮点数集合 C 中类似这样的东西 string myCString 4 5 3 1 6 5 7 0 1 3 然后 该变量进入 asp net 网页 并在其
  • 当上游服务器重新启动且未恢复正常时,NGINX 显示“错误网关”

    每次当我重新启动上游服务器时 我的 NGINX 显示 坏网关 这没关系 但后来 当上游服务器重新启动 nginx 时 nginx 不会自动恢复 我需要手动重新启动它 nginx 是否有一个选项可以让 nginx 每隔几秒检查一次上游是否恢复
  • Swift NSTimer 无法识别的选择器发送到实例timerFireMethod

    我正在为 iOS 9 2 编写一些计时器代码 我通过 xcode 下载了最新的 iOS 9 2 文档 他们展示 void timerFireMethod NSTimer timer 但这是行不通的 如果我使用这样的签名 func timer
  • 使用C#,如何读取动态创建的文本框的内容?

    Hy 我创建了一些具有标准内容的动态文本框 有谁知道当我按一个按钮时如何读取这些文本框的内容 假设用户修改了标准内容 多谢 Jeff Update 这就是我创建文本框的方式 foreach string name in listOfName
  • Magento getSingleton 混淆

    我对我接到的电话有点困惑Mage getSingleton 我希望有人能帮助我更好地理解 我见过一段核心代码是这样做的 Mage getSingleton customer session gt isLoggedIn 我不懂 PHP 但我想
  • Windows Phone 部署错误 DEP0001:意外错误:-2147009290

    正在开发 Windows Phone 10 应用程序 并在我的 ARM Lumia 950 设备上从 Visual Studio 运行它多次 然后我的 950 进行了操作系统更新 很快就强制重启了 更新至 10 0 14393 576 此后
  • 将新的 div 滑到另一个 div 下方

    我想要一个新的 隐藏的 div 从另一个 div 下面滑下来 我的想法是我有一个输入字段和一个添加按钮 单击添加按钮时 会显示更多表单元素 在下面滑出 这的形式部分对我的问题并不重要 所以我只是让第一个 div 为文本 将鼠标悬停在我身上以
  • 使用 Faraday 和 Rspec 进行存根

    我有一个看起来像这样的模型 class Gist def self create options post response Faraday post do request request url https api github com