簡體   English   中英

使用 Minitest 在 Rails 中測試失敗:為什么我的種子不起作用? 如果我改用固定裝置,為什么它會起作用?

[英]Failing Test in Rails with Minitest: Why is my seed not working? Why does it work if I use fixtures instead?

我已經開始學習如何使用 Ministest 進行測試。 我有一個用於運行測試的輔助項目。

我正在運行一個簡單的測試,用戶登錄,訪問項目索引並嘗試創建一個新項目。

我通過控制台播種:

rake db:seed RAILS_ENV=test

索引處有一個模態窗口,要求用戶將“技術”添加到他的“技能集”中。 我正在測試關閉模態,以便它可以像這樣單擊“創建項目”按鈕:

  test "a logged in user can create a project" do
    login_as users(:admin)
    visit projects_url
    click_on "Later" // close modal window
    click_on "Create Project"
    assert_equal new_project_path, page.current_path
  end

但是,我收到與模態窗口本身相關的錯誤,因為 Technology.first 等為零。 好像種子沒有運行並填充數據庫一樣。

使用技術實例的模式:

<div class="modal-body">
    <p class="mr-3 mb-0" style="font-size: 1.4rem; text-align: center;">
       <%= link_to (sanitize pick_tech_icon(Technology.first.name), tags: %w(i), attributes: %w(class style)) %>
       <%= link_to (sanitize pick_tech_icon(Technology.second.name), tags: %w(i), attributes: %w(class style)) %>
       <%= link_to (sanitize pick_tech_icon(Technology.third.name), tags: %w(i), attributes: %w(class style)) %>
       <%= link_to (sanitize pick_tech_icon(Technology.fourth.name), tags: %w(i), attributes: %w(class style)) %>
       <%= link_to (sanitize pick_tech_icon(Technology.fifth.name), tags: %w(i), attributes: %w(class style)) %>
    </p>
</div>

控制台錯誤:

Error:
ProjectsTest#test_a_logged_in_user_can_create_a_project:
ActionView::Template::Error: undefined method `name' for nil:NilClass
    app/views/shared/_add_skill_modal.html.erb:13
    app/views/projects/index.html.erb:1

為什么我的種子不起作用? 如果我使用 Technology 夾具來創建 Technology 實例,為什么測試運行正常? 我認為夾具不應該替換數據庫數據,而是作為要測試的數據。

在 Rails 4.x 中,我們有將每個測試包裝在數據庫事務中的事務性裝置。 此事務在測試結束時回滾所有更改。 它表示數據庫的狀態,測試前與測試完成后相同。

默認情況下啟用此功能。 我們可以通過將類屬性 use_transactional_fixtures 設置為 false 來選擇在測試用例類中禁用它

然而,

為了克服這種混淆,Rails 5將事務性裝置重命名為事務性測試,明確表示它與測試中使用的裝置無關。

參考: https : //blog.bigbinary.com/2016/05/26/rails-5-renamed-transactional-fixtures-to-transactional-tests.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM