Rspec: everyday-rspec实操: 第10章测试其他功能,第11章TDD
Posted Mr-chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rspec: everyday-rspec实操: 第10章测试其他功能,第11章TDD相关的知识,希望对你有一定的参考价值。
10.测试文件上传
作者推荐的Paperclip,官方维护组已经不推荐使用deprecated。
推荐使用rails自带的 ActiveStorage.
推进文件上传到云存储,并附加这些文件到Active Record object。它 和本地驱动服务一起用于开发和测试。也支持反射文件到附属服务作为备份backups and migrations。
http://guides.rubyonrails.org/active_storage_overview.html
首先,编写针对文件上传功能的测试(用的是Capybara的方法),并提供要使用的文件。attach_file "Attachment", "#{Rails.root}/spec/files/attachment.jpg"
接着,指定测试专用的上传路径。
最后,让 RSpec 在测试结束后清理文件。spec/rails_helper.rb
RSpec.configure do |config|
# 省略这个块里的其他内容 ...
# 测试组件运行完毕后清理上传的文件
config.after(:suite) do
FileUtils.rm_rf(Dir["#{Rails.root}/spec/test_uploads/"])
end
end
这是在功 能层测试文件上传的三个基本步骤。如果你用的不是 Paperclip,参阅上传库的文档,找出实现这三步的 方法。
10.3 测试电子邮件发送
大概浏览。会用到ActiveJob::TestHelper的方法
10.4 web 服务的测试,(??没看)
第 11 章 迈向测试驱动开发
首先编写测试,然后编写能 让测试通过的代码,最后重构,从长远利益重新审视代码的实现方式。
在这个过程中,测试影响代码选择,力求写出没有缺陷的软件,而且新需求出现时,也不担心更新会破坏现有功能。
pending: (adj) waiting to be decided or settled.
11.1 feature test
? 添加一个按钮,用于把项目标记为已完成;
? 用户登录后控制台中不显示已完成的项目。
第一,在动手之前,先运行整个测试组件,确保添加功能之前所有测试都能通过
然后,新建feature test, 并列出要做的事情,用注释标记在scenario中。
之后,编写测试代码,把注释替换为真正的步骤。
11.2 from red to green
再次运行测试rspec spec/features/xxx_spec.rb --tag foucs
发现?
Failure/Error: click_button "Complete"Capybara::ElementNotFound:
Unable to find visible button "Complete"
编写缺少的程序代码 视图中的按钮
然后在运行测试发现?
Projects user completes a projectFailure/Error: expect(project.reload.completed?).to be true
NoMethodError:
undefined method `completed?‘ for #<Project:0x00007f97b4392698>
根据RSpec的提示,根据业务逻辑编写代码,不同的业务逻辑意味不同的实现方法。
这里是通过用户的操作,点击按钮来判断project.completed?,然后储存这个状态。
所以应该为Project添加属性completed: boolean。储存项目的状态。
$ bin/rails g migration add_completed_to_projects completed:boolean $ bin/rails db:migrate
以上是关于Rspec: everyday-rspec实操: 第10章测试其他功能,第11章TDD的主要内容,如果未能解决你的问题,请参考以下文章
Rspec: everyday-rspec实操: 第10章测试其他功能,第11章TDD
我无法使用 'bundle exec rspec' 执行 rspec
ruby [rspec]“使用RSpec测试Rails程序”笔记