如何使用 Ruby MiniTest::Spec 和 Rails 进行 API 集成测试?

2024-03-22

我正在构建一个包含 Rails API 的应用程序,并希望使用 Ruby MiniTest::Spec 进行测试。

有什么好的设置方法吗?

例如,良好的目录组织、包含文件的良好方式等?

我正在使用《Rails 3 In Action》一书中的指南,该书使用 RSpec,并且有一个关于 API 的精彩章节。最大的变化是更喜欢 MiniTest::Spec。


用我迄今为止发现的内容来回答,以防对其他开发人员有帮助......

规格/api/items_spec.rb

require 'spec_helper'

class ItemsSpec < ActionDispatch::IntegrationTest

  before do
    @item = Factory.create(:item)
  end

  describe "items that are viewable by this user" do
    it "responds with good json" do
      get "/api/items.json"
      response.success?.must_equal true
      body.must_equal Item.all.to_json
      items = JSON.parse(response.body)
      items.any?{|x| x["name"] == @item.name}.must_equal true
    end
  end

end

规范/spec_helper.rb

ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
gem 'minitest'
require 'minitest/autorun'
require 'action_controller/test_case'
require 'capybara/rails'
require 'rails/test_help'
require 'miniskirt'
require 'factories'
require 'mocha'

# Support files                                                                                                                                                                                                                                                                  
Dir["#{File.expand_path(File.dirname(__FILE__))}/support/*.rb"].each do |file|
  require file
end

规格/工厂/item.rb



Factory.define :item do |x|
  x.name { "Foo" }
end
  

应用程序/控制器/api/base_controller.rb

class Api::BaseController < ActionController::Base
  respond_to :json
end

应用程序/控制器/api/items_controller.rb

class Api::ItemsController < Api::BaseController
  def index
    respond_with(Item.all)
  end
end

配置/routes.rb

MyApp::Application.routes.draw do
  namespace :api do
    resources :items
  end
end

Gemfile



group :development, :test do
  gem 'capybara'  # Integration test tool to simulate a user on a website.
  gem 'capybara_minitest_spec'  # MiniTest::Spec expectations for Capybara node matchers.
  gem 'mocha'  # Mocking and stubbing library for test doubles for Ruby.
  gem 'minitest', '>= 3'  # Ruby's core TDD, BDD, mocking, and benchmarking.
  gem 'minitest-capybara'  #  Add Capybara driver switching parameters to minitest/spec.
  gem 'minitest-matchers'  # RSpec/Shoulda-style matchers for minitest.
  gem 'minitest-metadata'  # Annotate tests with metadata key-value pairs.
  gem 'minitest-spec-rails'  # Drop in MiniTest::Spec support for Rails 3.
  gem 'miniskirt'  # Factory creators to go with minitest.
  gem 'ruby-prof'  # Fast code profiler for Ruby with native C code.
end
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Ruby MiniTest::Spec 和 Rails 进行 API 集成测试? 的相关文章

随机推荐

  • 我可以在 Sql Server 中对一组数字执行按位与运算吗?

    我有一个安全表 其中包含组和用户的列表 每个组和用户都有按位整数权限 对于每个给定的用户 我想对其所有组及其个人权限记录 如果存在 执行按位 AND 操作 当然 我可以轻松地在代码中执行此操作 但我宁愿在数据库中执行此操作 因为我正在查询权
  • 在 Python 中保存 VTK 中的数据数组

    Question 如何从 Python 中的 VTK 中提取数据集数组并将其保存在新文件中 e g 对于具有幅度数据集的 VTKforce 移位 and current仅提取移位并将其保存在较小的文件中 Problem 我在远程服务器上有数
  • Azure BLOB 存储虚拟请求

    I see strange requests when uploading blobs to storage The only methods I use is PutBlob and SetBlobTier But metrics sho
  • Firebase 3.0.1 Web API 查询不起作用,出现 iFrame 安全错误

    我做了一个简单的调用ref once value callback 回调从未被调用 相反 我在 Chrome 控制台中收到此错误 Refused to display https console firebase google com pr
  • 拥有一个 Activity 实例

    我的活动导航和返回堆栈有问题 我希望您能为我解决这个问题 问题 根 Activity gt gt gt SecondActivity gt gt HomeButton 然后 这将带我进入主页 然后我从那里选择 Gmail gt gt 消息
  • 在 makefile 中使用大括号进行变量扩展不起作用

    当我在 shell 上运行以下命令时 它可以正常工作 但如果我把它写在 Makefile 中并用 make 命令调用它 它就不起作用 cp wpa cli 请求者 密码 事件 usr local bin make 命令后出错 cp 无法统计
  • Docker build ARG 始终为空字符串

    我这里有一个 dockerfile FROM golang 1 13 alpine as build ARG DIR somevalue RUN echo DIR 输出是 Sending build context to Docker da
  • Cassandra 3 需要什么版本的 Java

    推荐的Java版本对于卡桑德拉 2 0 https stackoverflow com q 28912016 545127是 Java 7 但是 Cassandra 3 建议或需要哪个版本 具体来说 版本 3 5 一些信息表明需要 Java
  • XML:

    与问题类似 XML那个问号是什么意思 https stackoverflow com questions 39119165 xml what does that question mark mean例如 感叹号是什么意思 下面来自 的含义
  • PGAdmin 显示 Heroku 的数据库量过多

    我正在学习一些后端的东西 我在本地创建了一个测试数据库并填充了一些数据 然后使用以下命令将数据库转储到 SQL 文件 pg dump U USERNAME DATABASE no owner no acl f backup sql 最后将其
  • 在文件搜索中排除 Eclipse/Aptana 中查找的文件类型

    有没有办法在 Aptana 或 Eclipse 文件搜索中排除图像类型 我想搜索所有非图像文件 而不是指定我要搜索的所有文件类型 尝试添加一个 在您不想匹配的模式前面标记 put cgi pm sql 在文件名模式部分中 我正在使用 Ecl
  • 为什么接受数组的 C++ 模板并不比根据 GCC 5.3 和 Clang 4.0 接受指针的模板更专业?

    为什么接下来的两个模板声明不明确 因此两者都不比另一个更专业 我知道这个问题在 Stack Overflow 上已经被多次提出 但通常人们会回答如何解决歧义 而不是回答为什么会发生这种情况 I template
  • 在远程主机中:无法与主机 smtp.gmail.com 建立连接 [连接超时 #110]

    部署后 当我尝试发送邮件时出现以下错误 500 500内部服务器错误 Swift TransportException 无法与主机 smtp gmail com 建立连接 连接超时 110 堆栈跟踪 at in SF ROOT DIR li
  • Android 模拟器 - Wifi 错误

    我正在使用 Android SDK 模拟器广告尝试连接到网络 我无法在设置 gt 无线和网络中执行此操作 在我需要打开 WiFi 的地方 我收到 错误 怎么解决呢 Gorov 关闭模拟器 关闭以太网 火线和任何其他网络接口 他们全部 我的意
  • 在同一程序中调用 srand() 两次[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为什么当我在两个截然不同的点调用 srand 时会导致数字不是随机的 一旦我删除其中一个 它就会恢复正常 这取决于你如何称呼它 的目的sr
  • 在 JavaScript 中,如果我分配给一个具有 getter 但没有 setter 的对象属性,会发生什么情况?

    在下面的代码中 都使用了console log o x print 1 任务会发生什么情况o x 2 就这样被忽略了吗 var o get x return 1 console log o x 1 o x 2 console log o x
  • Java:在后台更新有大量行的 JTable

    我正在编写一个简单的 Java Swing 实用程序 它将从 MQ JMS 服务器读取消息并将它们显示在 JTable 中 private void getMessages try if null Queue Queue close Clo
  • 如何隐藏 emacs 创建的备份文件?

    我在使用 vi 很长时间后才开始使用 emacs 让我烦恼的一件事是 每当我修改文件 保存它并退出 emacs 时 我都会看到在同一目录中创建一个名为filename 如果我编辑的文件是filename 有什么办法可以摆脱这个吗 或者隐藏这
  • 将预测与 svyglm 结合使用

    我发现了一些奇怪的行为predict和svyglm对象从survey包裹 如果你的新数据在predict具有一个级别的因子 字符会输出错误 Error in contrasts lt tmp value contr funs 1 isOF
  • 如何使用 Ruby MiniTest::Spec 和 Rails 进行 API 集成测试?

    我正在构建一个包含 Rails API 的应用程序 并希望使用 Ruby MiniTest Spec 进行测试 有什么好的设置方法吗 例如 良好的目录组织 包含文件的良好方式等 我正在使用 Rails 3 In Action 一书中的指南