我創建了一個非常簡單的Rails 5演示應用程序,它有很多類別(Category
模型)。有一個_category.html.erb
部分的鏈接刪除類別:Rails 5,使用RackTest的RSpec - 刪除記錄功能測試
<%= link_to 'Remove', category_path(category), data: {method: :delete, confirm: 'Are you sure?'} %>
相應destroy
行動:
@category.destroy
respond_to do |format|
format.js
format.html {redirect_to root_path, notice: 'Category destroyed!'}
end
絕對沒有什麼花哨。然後,我編寫一個RSpec功能測試,用FactoryGirl創建一個類別,訪問類別頁面並單擊刪除鏈接。該Category.count
應等於0之後(我還添加了其他檢查,如「預計閃郵件包含‘類別摧毀!’,但是這並不重要)。
require 'rails_helper'
RSpec.feature 'Category deletion' do
let!(:category) { create(:category) }
scenario 'should be successful' do
visit categories_path
click_link 'Remove'
page.save_and_open_page
expect(Category.count).to eq(0)
end
end
所以我的問題是,這其實WORKS,我不明白爲什麼。問題是,刪除鏈接有method: :delete
部分,它由jquery_ujs庫處理,它主要發送一個帶有正確的HTTP DELETE動詞的請求。如果頁面上的JavaScript被禁用,我嘗試手動刪除類別,它不起作用 - 發送一個簡單的GET請求
我使用默認RackTest驅動程序與Capybara,它不支持JavaScrip噸。但是當我檢查由page.save_and_open_page
生成的頁面截圖時,它確實具有正確的Flash消息。
因此問題是 - 爲什麼以及這個工作到底如何?