Я хочу написать тест rspec с использованием factory girl для конкретной области использования

#ruby-on-rails #rspec #attributes #factory-bot

#ruby-on-rails #rspec #атрибуты #factory-бот

Вопрос:

Мой вариант использования — создать http-запрос с типом содержимого как json. например, я попал в конечную точку с помощью post-вызова с базовой аутентификацией (аутентификация — это базовая аутентификация, может быть как id: bla, key: blabla), а тело, например:

{
"age":"Name",
"properties":{
"age":21}
}

и должен проверить код ответа и ответное сообщение. Иногда я не хочу указывать возраст (обязательное поле внутри), чтобы увидеть, возвращается ли правильный код состояния. Я хочу написать свои тесты таким образом, чтобы они выглядели так:

 it 'some test' do
    response = create(:event)
    expect(response.code).to eq(200)
  end
  

приведенный выше тест должен выполнить http-вызов и вернуть ответ на assert.
Я совершенно не понимаю, как создать фабрику для вышеупомянутого сценария. Я любитель с Rspec.

Ответ №1:

Вам нужно передать параметры для выполнения действия POST, основываясь на коде состояния ответа, который вы можете утверждать, является ли вызов api успешным или нет?

Вы не можете использовать factorygirl здесь.

например:

 require "rails_helper"

RSpec.describe "Widget management", :type => :request do

  it "creates a Widget" do
    headers = {
      "ACCEPT" => "application/json",     # This is what Rails 4 accepts
      "HTTP_ACCEPT" => "application/json" # This is what Rails 3 accepts
    }
    post "/widgets", { :widget => {:name => "My Widget"} }, headers

    expect(response.content_type).to eq("application/json")
    expect(response).to have_http_status(:created)
  end

end
  

см.: https://www.relishapp.com/rspec/
для rspec

Комментарии:

1. Мой запрос: curl -X POST -H "Authorization: Basic dGVzdEFwcDp0ZXN0S2V5" -H "Content-Type: application/json" -d '{ "age":"Name", "properties":{ "age":21} } }' "http://ab.xyz.com" . Мой ответ будет похож { "accepted": true, "_itemId": "133b1921-b569-4b32-9645-26d8e46736c4" } на код состояния 200. я должен проверить, равен ли код состояния 200. Я должен написать тест с использованием factory girl.

2. Спецификация запроса должна делать реальные запросы. Но вы можете издеваться над ответами. Этот ответ является хорошим началом — если вы добавите видеомагнитофон в свой проект, вы можете настроить его так, чтобы он возвращал записанный ответ на запрос. Смотрите github.com/vcr/vcr