mig*_*igu 12 ruby rspec ruby-on-rails rspec2 rspec-rails
如何删除您创建的对象(在数据库和内存中)
有自动执行此操作的方法吗?
我有以下问题:
每个测试都将条目保存到数据库中.然后,下一个测试取决于这些条目.即使我想构建依赖于其他测试的测试,我也不能,因为测试执行的顺序是不可控的.
factories.rb:
sequence(:name) { |n| "purchaser #{n}" }
Run Code Online (Sandbox Code Playgroud)
organization_spec.rb:
context "when no supplier exists" do
it "finds no associated suppliers" do
purchaser = create(:organization_purchaser)
purchaser.partners.empty?.should == true
end
end
context "when one supplier exists" do
it "finds one associated suppliers" do
purchaser = create(:organization_purchaser)
supplier = create(:organization_supplier)
partnership = create(:partnership, organization: purchaser, partner: supplier)
purchaser.partners.last.name.should == "purchaser 1"
end
end
context "when two suppliers exist" do
it "finds two associated suppliers" do
purchaser = create(:organization_purchaser)
2.times do |i|
supplier = create(:organization_supplier)
partnership = create(:partnership, organization: purchaser, partner: supplier)
end
purchaser.partners.last.name.should == "purchaser 2"
end
end
Run Code Online (Sandbox Code Playgroud)
RSpec输出:
Organization
#suppliers_for_purchaser
responds
when no supplier exists
finds no associated suppliers
when two suppliers exist
finds two associated suppliers
when one supplier exists
finds one associated suppliers (FAILED - 1)
Failures:
1) Organization#suppliers_for_purchaser when one supplier exists finds one associated suppliers
Failure/Error: purchaser.partners.last.name.should == "purchaser 1"
expected: "purchaser 1"
got: "purchaser 3" (using ==)
Run Code Online (Sandbox Code Playgroud)
Leo*_*rea 15
您应该使用Database Cleaner
您所要做的就是将以下代码添加到Rspec配置文件中 spec_helper.rb
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
Run Code Online (Sandbox Code Playgroud)
UPDATE
从Rails 5.1开始,如果您使用,则不需要 config.use_transactional_tests
https://github.com/rails/rails/pull/19282
你尝试过添加before方法吗?
describe MyController do
before(:each) do
User.delete_all
MyOtherModel.delete_all
...
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6436 次 |
| 最近记录: |