选择rspec来测试写法更简单
安装rspec
- 在 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
- 运行
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
- 创建测试users的文件
bin/rails generate rspec:model users
- 在文件编写
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
- 运行查看测试结果
bundle exec rspec
报错 :Is the server running locally and accepting connections on that socket 没有连接数据库 没有配测试用的数据库
如何配置测试环境用的数据库?
- 启动数据库
docker start db-for-mangosteen
- 在database.yml 文件中将development的配置代码复制到test处
- 在测试环境下创建数据库
RAILS_ENV=test bin/rails db:create
- 同步数据库
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
- 创建测试users的文件
bin/rails generate rspec:request users
- 在新创建的文件编写
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
- 运行查看测试结果
bundle exec rspec
参考: