如何使用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快速代码分析器。 结束