0

我創建了一個非常簡單的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消息。

因此問題是 - 爲什麼以及這個工作到底如何?

回答