从rspec repo page on GitHub. 上的自述文件中可以获得有关设置 RSpec 的良好指南。
但是...就个人而言,以下是我最常用的组合:
-
Database cleaner:顾名思义,用于清理数据库。 Avdi on his blog here 提供了一个很好的设置指南。
注意:此博客建议将数据库清理器的配置放在支持目录中的单独文件中。如果这样做了,请记住取消注释 rails_helper.rb 文件中的以下行
# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
这将确保测试套件中需要支持目录下的所有文件。
-
FactoryGirls:这是用于生成测试记录(用户等),就像您在问题中提出的那样。 getting started document here. 上给出了足够好的指南
-
Faker:我用它来生成
Fake 随机值来构建我的记录。例如:测试用户的名字、姓氏、电子邮件、密码等,而不是硬编码这些值。使用它就像 repo 中的自述文件中所述的那样直接
有了以上内容,第一个 Rspec 规范就可以编写了。
Specs基本上可以分为两步:
描述是对诉讼的测试内容的总结,而期望是正常的预期结果。
描述也可以嵌套在其他描述中。
Rspec 测试的一个示例是:
require 'rails_helper'
describe TextMessage do
describe "#failed?" do
it "returns true" do
text = FactoryGirl.create(:text_message, :not_delivered)
expect(text.send(:failed?)).to be_truthy
end
end
end
首先,rails_helper 文件是必需的。这是所有测试配置所在的位置。此文件是在从其 repo 上的 Rspec 安装指南运行 rails generate rspec:install 命令时自动生成的。
接下来,我有一个描述块 describe TextMessage do;end 这是描述我的模型,在这种情况下是 TextMessage
接下来,我在第一个描述块中嵌套了另一个描述块,用于描述我的 TextMessage 模型中的方法(失败?):describe "#failed?" do;end
然后我有期望块,这是我的主要测试:
it "returns true" do
text = FactoryGirl.create(:text_message, :not_delivered)
expect(text.send(:failed?)).to be_truthy
end
failed? 方法的所有其他测试都将在此之下,以及它们各自的块...而模型中其他方法的其他测试将相应地在第一个之下。
希望我能够在这里为您解决这个问题。