加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用Rspec测试DELETE请求的最佳方法?

发布时间:2020-12-17 02:54:35 所属栏目:百科 来源:网络整理
导读:我开始用这种方式: 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
我开始用这种方式:

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请求的状态代码
>删除请求的响应
>删除请求的状态代码
>删除后获取请求的响应
> 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),])
    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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读