2014-10-12 123 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

相关问题