2016-12-30 52 views
0

例如,我正在搜索DB中的某些內容,Model.find_by(slug: :name)。它在本地環境中工作正常,但在測試中,它給了我零。 (我三重檢查它,並有記錄在分貝)。Rails無法在db中找到記錄(但它實際存在)

我甚至添加了調試來查看日誌。當我做Model.where(slug: :name).count它返回我0。但記錄真的存在與這個slug名稱。

我在哪裏可以解決這個問題?

+1

您檢查以確保開發和測試數據庫相同嗎? –

+0

*「我三重檢查了它,並且在db中有記錄」*三倍檢查了您的測試數據庫或您的開發數據庫,​​因爲它們默認情況下通常是獨立的數據庫並且通過設計 – engineersmnky

+0

不,沒有。但我檢查了要求的記錄。例如,我添加了調試器:使用「request.slug」,它返回給我'管理',然後我去測試服務器數據庫,並發現有'管理'的記錄。所以記錄存在。 –

回答

0

運行測試時,Rails使用不同的數據庫。常見的約定是projectname_development vs projectname_test(最後是projectname_production)。

通常測試系統還會在運行測試之前清除測試數據庫。這是由於兩個原因:

  • 你不想通過測試弄亂你的開發數據庫。許多開發人員讓他們的測試在開發過程中不斷運行。
  • 你寫的每一個測試都應該獨立工作,獨立於周圍的數據。

您必須爲每個單獨的測試設置您的測試數據。你沒有提到你使用的是什麼測試系統。

看一看FixturesFactory Girl

+0

對不起,但它不是。我知道這件事。我說的是'如果model.find_by(slug::name)返回nil,如果記錄實際存在於DB中,那麼在模型表中。 –

0

存儲在測試數據庫中的數據是暫時的,在測試結束後會被刪除。 開發數據庫獨立於測試數據庫。

相關問題