Rspec中的奇怪行为

时间:2015-11-20 12:00:20

标签: ruby-on-rails ruby rspec

我正在我的控制器规范中运行一些测试,我发现了一个奇怪的行为,我无法解释为什么会发生这种情况。

我的规格看起来像这样:

require 'rails_helper'

describe BooksController do
  let(:user_with_books) { create :user, :with_books }

  ...

  describe 'GET /books/:book_id/owners' do
    it 'shows all owners of the book' do
      book = user_with_books.books.first
      user_2 = create :user
      book.owners << user_2
      get :owners, book_id: user_with_books.books.first.id
      expect(assigns(:users).count).to eq 2
      expect(assigns(:users).first).to eq user_with_books
      expect(assigns(:users).second).to eq user_2
    end
  end
end

如果我运行命令 rspec spec/controllers/books_controller_spec.rb:31一切都是绿色的: enter image description here

但如果我只运行rspec,测试将会失败!

enter image description here

Rspec对此规范做了什么改变行为?我该怎么做才能解决这个问题?

编辑:我的spec_helper.rb

RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods
  config.infer_spec_type_from_file_location!
  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
  end
end

1 个答案:

答案 0 :(得分:1)

根据您的spec_helper.rb,您永远不会打电话给DatabaseCleaner.clean。实际上<{3}}到实际清理数据库,例如: G。 before(:each)过滤器:

config.before(:each) do
  DatabaseCleaner.clean
end