繁体   English   中英

用Rspec测试DELETE请求的最佳方法?

[英]Best way to test DELETE requests with Rspec?

我开始使用这种方式:

  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请求删除数据的最佳方法。

到目前为止,您的测试正在确保这一点:

  • 删除之前get请求的响应
  • 获取请求的状态码
  • 删除请求的响应
  • 删除请求的状态码
  • 删除后获取请求的响应
  • 获取请求的状态码

此测试涵盖的内容比删除请求要多得多,但我认为还可以。 最好没有这种测试。

我希望改进此测试的目的是在测试时拆分路由。 我将进行1次测试以确保索引路由按预期运行,并进行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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM