rspec + capybara + factory_girl总是创建测试用户

时间:2014-12-14 18:58:06

标签: ruby-on-rails ruby-on-rails-3 rspec

我有一个奇怪的问题,我不知道如何调试它。我目前正在使用这些宝石(这篇文章的最新版本):

factory_girl-4.5.0
rspec-rails-3.1.0
capybara-2.4.4
guard-2.6.1

每当我使用bundle exec guard开始守卫或每当新测试运行时,它总是在测试数据库中创建一个用户。所以每次开始User.count == 1。我无法弄清楚那里的名字。

这是我的spec_helper.rb

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'email_spec'
# require 'rspec/autorun'
require 'capybara/rspec'
require 'factory_girl'
require 'lorem-ipsum'

# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  config.include(EmailSpec::Helpers)
  config.include(EmailSpec::Matchers)
  config.include FactoryGirl::Syntax::Methods
  config.include ApplicationHelper
  config.use_transactional_fixtures = false
  config.infer_base_class_for_anonymous_controllers = false
  config.include RSpec::Rails::RequestExampleGroup, type: :feature
  config.infer_spec_type_from_file_location!
  config.include Requests::JsonHelpers, :type => :request
  config.order = "random"

  config.before(:suite) do
    DatabaseCleaner.strategy = :truncation
    Capybara.javascript_driver = :webkit
  end
  config.before(:each) do
    Mongoid::IdentityMap.clear  #If you have the identity map enabled in your application, you should set up a global hook to clear out the map before each test so the test suite does not create memory bloat. For example in RSpec in spec_helper.rb.
    Rails.cache.clear
    DatabaseCleaner.start
  end
  config.after(:each) do
    DatabaseCleaner.clean
  end
end

我的factories.rb非常简单:

FactoryGirl.define do
  factory :user, aliases: [:authored_by]  do
    sequence(:first_name) {|n| "TestFN#{n}" }
    sequence(:last_name) {|n| "TestLN#{n}" }
    sequence(:email) {|n| "rspec-test-#{n}@example.com" }
  end
end

我应该在哪里开始调试以找出创建用户的原因?

1 个答案:

答案 0 :(得分:0)

查看/ spec目录。 FactoryGirl.lint被调用了吗?您是否在规范/功能等中定义的测试中调用用户工厂?您是否使用DatabaseCleaner来维护测试环境?