1
使用Rspec創建簡單的控制器規格時,我遇到了一個非常棘手的問題。造成問題的方法稱爲#set_company
,它爲當前登錄的用戶設置父'帳戶'。控制器規格中消失的數據
def set_company
return false if !user_signed_in?
current_company = Company.find(current_user.company_id)
set_current_tenant(current_company)
end
我的規格看起來像這樣:
require 'spec_helper'
describe Api::V3::UsersController, :type => :controller do
describe 'GET #index' do
let(:user) { FactoryGirl.create(:user) }
let(:company) { user.company }
before {
allow(controller).to receive(:current_user) {user}
allow(controller).to receive(:current_tenant) {company}
}
it 'returns 200' do
get :index
expect(response.code.to_i).to eq 200
end
it 'assigns @users' do
get :index
expect(assigns(:users)).to eq [user]
end
end
end
的事情是,第二次測試是綠色的,但是第一個是不是(這個順序是正確的!)。它是紅色的,這是因爲,當它被觸發時,不存在company
之類的東西。這是怎麼一回事呢:
user
正在創建(與company
,這是一個依賴),該用戶的ID的是,並與用戶創建一個公司的ID也- 第二個測試被觸發並且一切都很好
- 第一個測試被觸發,但在數據庫中沒有ID爲1的
Company
,有一個新的ID = 2,這顯然是錯誤的,並導致我的set_company
方法下降。
我認爲這可能與我正在使用database_cleaner的事實有關,但我完全不知道如何處理這個事情,我該怎麼辦。謝謝大家的任何線索。
其實我有一些JS測試 – mbajur