2014-10-12 168 views
3

我開始使用這種方式:用Rspec測試DELETE請求的最佳方法是什麼?

describe "DELETE /v1/categories/{id}" do 
    before(:each) do 
    # Login User/Token 
    end 
    it 'deletes a category' do 
    category = Fabricate(:category) 
    category2 = Fabricate(:category) 

    get "/v1/categories" 
    expect(response.status).to eq 200 
    expect(JSON.parse(response.body)).to eq([YAML.load(category.to_json),YAML.load(category2.to_json),]) 

    delete "/v1/categories/#{category.id}" 
    expect(response.status).to eq 200 

    get "/v1/categories" 
    expect(JSON.parse(response.body)).to eq([YAML.load(category2.to_json)]) 
    end 
end 

我不知道,如果是測試的API請求刪除數據的最佳方式。

回答

5

到目前爲止,你的測試是確保本:

  • GET請求的響應刪除
  • GET請求
  • 刪除請求
  • 狀態的響應的狀態代碼之前刪除請求代碼
  • 刪除後獲取請求的響應
  • get re的狀態碼任務

這個測試涵蓋了更多的刪除請求,但我認爲它很好。最好有這種測試,然後沒有。

我想改善這個測試的方法是在測試時拆分路線。 我將進行1次測試,以確保索引路線按預期工作,並測試以確保刪除路線正常。這樣,索引路徑上的錯誤不會破壞你的刪除規範。 =)

我想有這樣的事情:

describe "GET /v1/categories" do 
    before(:each) do 
     # Login User/Token 
     category = Fabricate(:category) 
     category2 = Fabricate(:category) 
     get "/v1/categories" 
    end 

    it 'should return status 200' do 
     expect(response.status).to eq 200 
    end 

    it 'list all categories' do 
     expect(JSON.parse(response.body)).to eq([YAML.load(category.to_json),YAML.load(category2.to_json),]) 
    end 
end 

describe "DELETE /v1/categories/:category_id" do 
    before(:each) do 
     # Login User/Token 
     category = Fabricate(:category) 
     category2 = Fabricate(:category) 
     delete "/v1/categories/#{category.id}" 
    end 

    it 'should return status 200' do 
     expect(response.status).to eq 200 
    end 

    it 'should delete the category' do 
     expect(Category.all).to eq category2 
    end 
end 
+0

我已經有所有的URL和方法,所有的測試。我的問題是關於我只需要測試刪除請求,而不是檢查數據庫上是否存在該對象?或者我可以使用我的方式進行測試,在數據庫上創建兩個類別,刪除一個並列出所有類別以檢查刪除的數據庫是否在陣列上。檢查此鏈接:https://github.com/larica/larica-api/blob/342ca6ff4a6f69651c814515a7be950afb8a47b0/spec/api/v1_categories_spec.rb – 2014-10-12 01:40:49

+0

兩種方法都可以。 =) – 2014-10-12 02:02:05

+0

這只是一個味道問題。如果可以的話,我不喜歡混合使用同一規格的所有路線,但正如我所說,這只是我的看法。你的方式很好! – 2014-10-12 02:03:13

相關問題