与标题中的建议一样,我有一个奇怪的错误。事实上,当我尝试为测试环境保留一个操作时(例如: rake test:prepare ),它会以某种方式影响其他环境并删除我数据库中的所有记录(mysql) 。 (我正在使用rspec,我正在关注Michael Hartl的教程。) 另一个例子(可能更清楚)是当我编写测试时,通过FactoryGirl来暗示创建和取消新用户:
位置:spec / factories.rb
FactoryGirl.define do
factory :user do
sequence(:name) {|n| "Person #{n}"}
sequence(:email) {|n| "person_#{n}@example.it"}
password "luckyluke"
password_confirmation "luckyluke"
factory :admin do
admin true
end
end
位置:spec / requests / users_pages_spec.rb
describe "pagination" do
before(:all) { 30.times { FactoryGirl.create(:user) } }
after(:all) { User.delete_all }
# tests...
end
虽然我进入了测试环境,但是当我跑步时 捆绑exec rspec spec / requests / users_pages_spec.rb ,rails确实在我的数据库上创建了30个用户,并且确实从数据库中删除了所有用户。 (也是在测试之前创建和存储的用户!!)。
P.S。对不起我的英文
答案 0 :(得分:0)
模拟数据库应该在每次测试之前进行,以确保隔离。这样,FactoryGirl
还负责删除其创建的所有内容(如此answer中所述):
describe "pagination" do
before(:each) { 30.times { FactoryGirl.create(:user) } }
# tests...
end
另外,建议数据库在测试之前不包含来自的任何数据,因为它可能会改变测试的行为 - 它应该只包含 测试期望它包含。