ruby-on-rails – Rspec – 如何在每次测试后清理数据库
发布时间:2020-12-17 03:41:50 所属栏目:百科 来源:网络整理
导读:我有一个功能规格与Capybara的登录页面,我正在使用FactoryGirl DatabaseCleaner require 'rails_helper'feature 'Admin signs in' do background do FactoryGirl.create(:user) end scenario 'with valid credentials' do visit admin_root_path fill_in 'us
我有一个功能规格与Capybara的登录页面,我正在使用FactoryGirl
DatabaseCleaner
require 'rails_helper' feature 'Admin signs in' do background do FactoryGirl.create(:user) end scenario 'with valid credentials' do visit admin_root_path fill_in 'user_email',:with => 'email@email.com' fill_in 'user_password',:with => 'testpassword' click_button 'Sign in' expect(page).to have_content('Dashboard') end scenario 'with invalid credentials' do visit admin_root_path fill_in 'user_email',:with => 'wrongpassword' click_button 'Sign in' expect(page).to have_content('Admin Login') end end 运行测试,我收到以下错误: 1) Admin signs in test with invalid credentials Failure/Error: FactoryGirl.create(:user) ActiveRecord::RecordInvalid: Validation failed: Email has already been taken 我认为DatabaseCleaner会恢复更改,但看起来用户记录在数据库中持续存在直到第二个场景块. 如何在第一个场景后确保清理数据库? 我在此post之后配置了数据库清理程序 # support/database_cleaner_spec.rb RSpec.configure do |config| config.before(:suite) do DatabaseCleaner.clean_with(:truncation) end config.before(:each) do DatabaseCleaner.strategy = :transaction end config.before(:each,:js => true) do DatabaseCleaner.strategy = :truncation end config.before(:each) do DatabaseCleaner.start end config.after(:each) do DatabaseCleaner.clean end end 我还更新了规范帮助文件: config.use_transactional_fixtures = false 解决方法
我错误地认为spec / support文件夹中的配置文件是自动加载的,但事实证明我必须取消注释spec / rails_helper.rb中的以下行
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } DatabaseCleaner配置文件是正确的,它根本没有加载. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |