Ruby on rails RSpec:在每个上下文之后刷新表/销毁对象
如何删除创建的对象(在数据库和内存中)Ruby on rails RSpec:在每个上下文之后刷新表/销毁对象,ruby-on-rails,ruby,rspec,rspec2,rspec-rails,Ruby On Rails,Ruby,Rspec,Rspec2,Rspec Rails,如何删除创建的对象(在数据库和内存中) 每次测试后 在每个上下文之后呢?(在某种情况下,在彼此之间建立测试可能是有意义的) 是否有一种方法可以自动执行此操作 我有以下问题: 每个测试都将条目保存到数据库中。接下来的测试取决于这些条目。即使我想构建依赖于其他测试的测试,我也做不到,因为测试的执行顺序是不可控的 factories.rb: sequence(:name) { |n| "purchaser #{n}" } 组织机构规范rb: context "when no supp
- 每次测试后
- 在每个上下文之后呢?(在某种情况下,在彼此之间建立测试可能是有意义的)
sequence(:name) { |n| "purchaser #{n}" }
组织机构规范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
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 ==)
您是否尝试添加before方法
describe MyController do
before(:each) do
User.delete_all
MyOtherModel.delete_all
...
end
我想你的问题更多的是关于如何重置工厂女孩序列?这些数据不会存储在数据库中,即使删除所有数据,问题仍然存在。当测试类似的东西时,我发现覆盖factory girl序列更容易
it "finds one associated suppliers" do
purchaser = create(:organization_purchaser)
supplier = create(:organization_supplier , name: "My First Supplier")
partnership = create(:partnership, organization: purchaser, partner: supplier)
purchaser.partners.last.name.should == "My First Supplier"
end
你可能做的其他事情是
it "finds one associated suppliers" do
purchaser = create(:organization_purchaser)
supplier = create(:organization_supplier)
partnership = create(:partnership, organization: purchaser, partner: supplier)
purchaser.partners.last.should == supplier
end
甚至
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 == supplier.name
end
你应该使用
您只需将以下代码添加到Rspec配置文件spec\u 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
更新
从Rails 5.1开始,如果您使用config.use\u transactional\u tests