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