在 Ruby on Rails 项目中我该如何测试API

53 阅读1分钟

选择rspec来测试写法更简单

安装rspec

  1. 在 Gemfile 文件中添加:
group :development, :test do
  # See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
  gem "debug", platforms: %i[ mri mingw x64_mingw ]
  gem 'rspec-rails', '~> 6.0.0'
end
  1. 运行
bundle install

rails generate rspec:install

测试Modal的功能

users表字段定义

class CreateUsers < ActiveRecord::Migration[7.0]
  def change
    create_table :users do |t|
      t.string :name

      t.timestamps
    end
  end
end
  1. 创建测试users的文件
bin/rails generate rspec:model users
  1. 在文件编写
require 'rails_helper'

RSpec.describe Users, type: :model do
  it 'has name' do
    user = User.new name: 'chili'
    expect(user.name).to eq 'chili'
  end
end
  1. 运行查看测试结果
bundle exec rspec

报错 :Is the server running locally and accepting connections on that socket 没有连接数据库 没有配测试用的数据库

如何配置测试环境用的数据库?

  1. 启动数据库
docker start db-for-mangosteen
  1. 在database.yml 文件中将development的配置代码复制到test处
  2. 在测试环境下创建数据库
RAILS_ENV=test bin/rails db:create
  1. 同步数据库
RAILS_ENV=test bin/rails db:migrate

测试 controller 请求

定义路径: 发出post请求就会执行对应的create方法,可通过 bin/rails routes 查看对应关系

Rails.application.routes.draw do
      resources :user
end
# app/controllers/api/v1/users_controller.rb

class UsersController < ApplicationController
  def create
    user = User.new name: params[:name]
    if user.save
      render status: 200
    else
      render json: {errors: user.errors}, status: 400
    end
  end
end
  1. 创建测试users的文件
bin/rails generate rspec:request users
  1. 在新创建的文件编写
require 'rails_helper'

RSpec.describe Users, type: :request do
    describe "create" do
    it "create" do
      post '/api/v1/users', params: {name: 'chili'}
      expect(response).to have_http_status 200
    end
  end
end
  1. 运行查看测试结果
bundle exec rspec

参考:

  1. rspec-rails
  2. ruby-toolbox