Rspec: everyday-rspec实操: 第10章测试其他功能,第11章TDD

Posted Mr-chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rspec: everyday-rspec实操: 第10章测试其他功能,第11章TDD相关的知识,希望对你有一定的参考价值。

10.测试文件上传

作者推荐的Paperclip,官方维护组已经不推荐使用deprecated。

推荐使用rails自带的 ActiveStorage.

Active Storage:

推进文件上传到云存储,并附加这些文件到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 project

Failure/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

是否有RSpec等效的RSpec来做TDD?

ruby [rspec]“使用RSpec测试Rails程序”笔记

RSpec vs Cucumber(RSpec 故事)[关闭]

rspec 3 - 存根类方法