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

我正在构建一个包含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”}
结束

应用程序/控制器/ 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:开发,:test do
   gem'capybara'#集成测试工具,用于模拟网站上的用户。
   gem'capybara_minitest_spec'#MiniTest :: Spec对Capybara节点匹配器的期望。
   gem'mocha'#Mocking和stubbing库,用于Ruby的测试双打。
   gem'minitest','> = 3'#Ruby的核心TDD,BDD,模拟和基准测试。
   gem'minitest-capybara'#将Capybara驱动开关参数添加到minitest / spec。
   gem'minitest-matchers'#RSpec / Shoulda-style matchers for minitest。
   gem'minitest-metadata'#使用元数据键值对注释测试。
   gem'minitest-spec-rails'#Lin in MiniTest :: Spec支持Rails 3。
  gem'迷你裙'#工厂创作者与minitest一起去。
   gem'ruby-prof'#具有本机C代码的Ruby快速代码分析器。
结束