Day 22 rspec-rails 介绍!

该文章同步发布於:我的部落格

今天我们会把 RSpec 安装进入 Rails 里面,以及一些基本的设定。

主要会介绍:

  1. rspec-rails 安装的方式
  2. 自动根据 rails generate 的指令来产生 _spec.rb 的档案
  3. 介绍一些 rails 特定的 matcher
  4. rails 一定会写的测试种类
  5. 一定会用到的测试套件!

rspec-rails 的安装方式

在 rails 的专案目录中找到 Gem.file 档案。

并且同时在 development 以及 test 的 group 下加入最新版本的 rspec-rails 最新版本 ( 记得要加上版本号喔! )

group :development, :test do
  gem 'rspec-rails', '~> 5.0', '>= 5.0.2'
end

接着我们在终端机输入指令:

$ bundle install

这步主要是把这个 gem 安装进入我们这专案的里面,接着我们需要继续输入指令:

$ rails generate rspec:install
      create  .rspec
      create  spec
      create  spec/spec_helper.rb
      create  spec/rails_helper.rb

里面的 .spec 以及 spec 资料夹和 spec_helper.rb 已经在前五天就有介绍过了!

但其实 rails_helper.rb 其实没有什麽太多重要的东西需要设定,毕竟测试的核心还是在 spec_helper.rb 里面。

rails_helper.rb 里面比较多的是额外插件的设定,或是更换关於 Rails 的东西,例如不想要用 ActiveRecord 也可以关掉,路径以及环境的设定会放在这边。

之後介绍的 Factory-bot 以及 资料库的清洗都会在这边设定,到时候会再示范一下~

自动产生测试档案

自动产生档案这件事情,在我们前面安装完後其实就有了这项功能。

我们可以使用指令 rails g model --help 来看看有什麽不同。

我这边截图的是全新 new 出来的专案,看看指令後的情况!

一开始的预设是 test_unit,也就是我们在根目录中会看到一整包 test 的资料夹,在我们安装 RSpec 後可以直接全部删掉了!

接着我们看看安装完 RSpec 的专案是什麽样子吧!

这就是为什麽我们在 rails g model / controller 等等时,会自动产生测试档案的原因~

rspec-rails 特别的 matcher

众所皆知 rails 是一个 Web 开发的框架,所以当然有些比较特别的 matcher 是为了网站所打造的!

此图片截图自 rspec-railsgithub README

其实用看的就能理解他要测试的东西都和网际网路有相关,所以才需要特制,关於 render 页面,pathhttp_status 等等,都能够在 rspec-rails 中找到唷!

Rails 测试的优先顺序

一般来说测试是写的越多越好,甚至可以达到传说中的覆盖率 100 % 那当然是无话可说!

但现实并不常常是如此,如果不是规模特别大的公司,工程师常常是身兼多职,从前端写到後端,甚至测试以及 CI/CD 等等,都需要一条龙掌握住!

但这个时候问题就来了,工时其实就是那样,除非你无限爆肝,不然也不可能达到 100 % 的测试覆盖率~

那我们就可以针对比较重要的项目来进行测试,以下是 Rails 的测试项目:

  1. Model specs
  2. System specs / feature specs*
  3. Request specs / controller specs*
  4. Helper specs
  5. View specs
  6. Routing specs
  7. Mailer specs
  8. Job specs

上面的顺序其实也反应了我自己对於测试的重要度感受。

Model 的测试不用说了,肯定是整个 Rails 的根基,也为了我们後面的 Feature / System test 打下基础!

而 Feature / System test 则是会让我感觉到安心的一个测试模式,毕竟他是真的模仿使用者在浏览网站,但也因为他的测试规模较大,耗时较长,所以我们才需要 Model test 来帮助我们检查小螺丝~

至於 Request 的测试就相对比较少,因为我自己觉得有点和 System test 重叠的部分,如果我的 Controller 坏了,那我的 System test 也不会通过才对!

所以单独测试 Controller 会让我觉得有点小题大作~

至於从 Helper 到 Job 的测试都是平常比较少写的,但如果是 API 模式,少了 Feature / System test 的话,可能就要把测试覆盖到各个小地方去才好!

最常使用的延伸套件

绝对非 Capybara 以及 FactoryBot 为主,这两项在撰写 RSpec 的过程中应该是不可能不使用到才对~

明天也会介绍 FactoryBot 的基本使用以及一些在撰写不同测试需要注意的事情!

而後天则会介绍 Capybara,也是我们在撰写 Feature / System test 时最为重要的夥伴!

小结

之後的文章也会尽量加入一些自己在撰写专案中踩到的小雷,或是需要特别注意的地方!

因为其实写 RSpec 常常会遇到一些奇奇怪怪的情况,或是不知道为什麽就是不行动,但其实有一些小撇步可以让写测试也变得开心喔!

希望让大家在写测试的时候,都能够感觉像是在实作功能一样轻松简单快快乐乐!


<<:  台上三分钟,台下十年工

>>:  人脸辨识-day21 资料预处理--2

Day27 javascript HTML DOM简单介绍

今天来看看JavaScript HTML DOM,这其实应该在前面就有稍微提到,但我想了想还是专门做...

[Day 26] Reactive Programming - Spring WebFlux(R2DBC Repositories)

前言 上一篇我们使用ReactiveCrudRepository来对资料库存取,对於一些不太复杂的S...

MySQL汇入JS

MySQL汇入JS 汇入前置作业 Npm安装MySQL 汇入成功 CRUD测试 R : 查询(Rea...

[Day21] Load Balancer

Load Balancer (负载平衡器) 与 Auto Scaling 都算是云端设备中非常重要的...

【这些年我似是非懂的 Javascript】那些年我睡掉的物件导向 #浅谈 #Part 3

嗨各位~ 今天要来分享一下关於上次提到 Javascript 没有类别可以实体化只有物件, 那他到...