该文章同步发布於:我的部落格
今天我们会把 RSpec 安装进入 Rails 里面,以及一些基本的设定。
主要会介绍:
rspec-rails
安装的方式rails generate
的指令来产生 _spec.rb
的档案在 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
等等时,会自动产生测试档案的原因~
众所皆知 rails 是一个 Web 开发的框架,所以当然有些比较特别的 matcher 是为了网站所打造的!
此图片截图自
rspec-rails
的 github README
其实用看的就能理解他要测试的东西都和网际网路有相关,所以才需要特制,关於 render
页面,path
& http_status
等等,都能够在 rspec-rails
中找到唷!
一般来说测试是写的越多越好,甚至可以达到传说中的覆盖率 100 % 那当然是无话可说!
但现实并不常常是如此,如果不是规模特别大的公司,工程师常常是身兼多职,从前端写到後端,甚至测试以及 CI/CD 等等,都需要一条龙掌握住!
但这个时候问题就来了,工时其实就是那样,除非你无限爆肝,不然也不可能达到 100 % 的测试覆盖率~
那我们就可以针对比较重要的项目来进行测试,以下是 Rails 的测试项目:
上面的顺序其实也反应了我自己对於测试的重要度感受。
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 常常会遇到一些奇奇怪怪的情况,或是不知道为什麽就是不行动,但其实有一些小撇步可以让写测试也变得开心喔!
希望让大家在写测试的时候,都能够感觉像是在实作功能一样轻松简单快快乐乐!
今天来看看JavaScript HTML DOM,这其实应该在前面就有稍微提到,但我想了想还是专门做...
前言 上一篇我们使用ReactiveCrudRepository来对资料库存取,对於一些不太复杂的S...
MySQL汇入JS 汇入前置作业 Npm安装MySQL 汇入成功 CRUD测试 R : 查询(Rea...
Load Balancer (负载平衡器) 与 Auto Scaling 都算是云端设备中非常重要的...
嗨各位~ 今天要来分享一下关於上次提到 Javascript 没有类别可以实体化只有物件, 那他到...