Разрешить содержимому массива при сравнении eq быть любым в тесте rspec

#ruby-on-rails #ruby #rspec #graphql

#ruby-on-rails #ruby #rspec #graphql

Вопрос:

У меня есть GraphQL API, использующий Ruby (на Rails), и я столкнулся с ситуацией при написании тестов запроса, которые для поддержания высокой читаемости должны принимать массив для любого содержимого в eq сравнении.

Вот так:

          expect(json_response).to eq({
            data: {
              Post: {
                PostId: nil,
                wasUpdated: false,
                errors[<Any error acceptet here>]
              }
            }
          })
  

Я пытался с:
errors[*]
… не сработало.

Позвольте мне рассказать вам об этом. Это общий тест, позволяющий увидеть, что postID: nil и wasUpdated: false И массив ошибок возвращаются при возникновении какой-либо ошибки. Поскольку это общий тест на сбой, не представляет интереса указывать, какая конкретная ошибка возвращается.

Отсюда мой вопрос; как мне написать, чтобы учесть все вышеописанное, ожидаемое, НО в массиве ошибок все идет?

Ответ №1:

Вы можете использовать RSpec composition, чтобы помочь с этими документами

В этом случае ваш тест будет выглядеть так:

 expect(json_response).to match({
        data: {
          Post: {
            PostId: nil,
            wasUpdated: false,
            errors: an_instance_of(Array)
          }
        }
      }) 
  

Рабочий пример