2014-10-12 6 views
3

Я начал использовать этот путь:Лучший способ проверить DELETE-запросы с помощью 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 для удаления данных.

ответ

5

Пока ваш тест обеспечивает это:

  • ответ запроса GET перед удалением
  • кода состояния запроса GET
  • реакция удаления запроса
  • статуса код запроса на удаление
  • ответ запроса на получение после удаления
  • код состояния get re Квест

Этот тест покрывает намного больше, чем запрос на удаление, но я думаю, что все в порядке. Лучше иметь такие тесты, а затем их нет.

Что бы я сделал, чтобы улучшить этот тест, было бы разделение маршрутов при тестировании. У меня было бы 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 
+0

У меня уже есть все тесты для всех URL и методов. Мой вопрос в том, что мне просто нужно проверить запрос на удаление, чем проверить, существует ли объект в базе данных? Или я могу проверить, используя мой путь, создавая две категории в базе данных, удаляю их и перечисляю все категории, чтобы проверить, удален ли один из них. Проверьте эту ссылку: https://github.com/larica/larica-api/blob/342ca6ff4a6f69651c814515a7be950afb8a47b0/spec/api/v1_categories_spec.rb –

+0

Оба метода в порядке. =) –

+0

Это просто вопрос вкуса. Мне не нравится смешивать все маршруты в одной и той же спецификации, если я могу, но, как я уже сказал, это просто мое мнение. Твой путь в порядке! –

 Смежные вопросы

  • Нет связанных вопросов^_^