Тестовое преобразование объекта Ruby в объект json с помощью Rspec - PullRequest
0 голосов
/ 06 марта 2019

У меня есть объект, скажем, с четырьмя атрибутами;

Object
attr1, attr2, attr3, attr4

Мне нужно отправить эту информацию в другое приложение по соображениям Data Science.Я создаю метод, который выполняет сопоставление:

def convert_for_elastic_search
    {
        name_attr1: @object.attr1,
        name_attr2: @object.attr2,
        name_attr3: @object.attr3
    }
end

Как я могу проверить этот метод с RSpec?Я не могу издеваться и не хочу жестко кодировать значения, так как они получены от Factory Bot.

Какой подход лучше?

1 Ответ

0 голосов
/ 07 марта 2019

Лучше всего было бы как-то получить ссылку на @object.Если он создан с помощью вызова create (), вы можете переопределить атрибуты фабрики.

Если вы не можете установить значения напрямую, вы можете создать ожидания, которые подтверждают, что «сопоставленные» значения соответствуют источникузначения.

object { FactoryBot.create(:object) }
subject { FactoryBot.create(:mapper, object: object) }
result = subject.convert_for_elastic_search
expect(result[:name_attr1]).to eq object.attr1
expect(result[:name_attr2]).to eq object.attr2
expect(result[:name_attr3]).to eq object.attr3

Конечно, если вы настраиваете спецификацию, как показано выше, тогда было бы тривиально установить жестко закодированные значения.то есть FactoryBot.create(:object, attr1: 'val1').В этом случае вы можете просто ожидать «val1».

Если object недоступен, как показано выше, тогда вам понадобится способ получить ссылку на него, возможно, картограф (субъект) это как-то обнажит.

Если вы действительно не можете получить значение @object, то, возможно, достаточно просто проверить значение, и правильного типа данных будет достаточно для проверки процесса сопоставления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...