Size: a a a

2020 December 17

SP

Sergey Protko in PHP
Подниму вопрос - кто пользуется какими либками для phpunit/etc для матчинга структур данных? Есть убогий coduo/php-matcher (бесполезный комбайн), есть phpunit array subset (оч ограниченные возможности). Что хочу - что-то больше похожее на то что можно в JS увидеть аля...

expect(data).toEqual(expect.arrayContains([
   expect.objectContains({
       partial: {objectKey: "value"}
   })
])
источник

SP

Sergey Protko in PHP
писать свой?
источник

SP

Sergey Protko in PHP
self::assertThat(DataStructureShould::beEqual(
   expectArrayContains([
       expectObjectContains([
            "partial" => ["objectKey"  => "value"]
       ])
   ])
)
)

??
источник

VS

Vlad Shulyar in PHP
Sergey Protko
писать свой?
Наговнячили года полтора назад assertArrayEquals, который и со строками ключами и с чисельными и без ключей и с разным порядком элементов работает. Пока вроде стабильно. На основании него уже разные assertArraySubset и тд
источник

SP

Sergey Protko in PHP
Vlad Shulyar
Наговнячили года полтора назад assertArrayEquals, который и со строками ключами и с чисельными и без ключей и с разным порядком элементов работает. Пока вроде стабильно. На основании него уже разные assertArraySubset и тд
ну вот кейс выше - мол "хочу что бы был объект где где-то в списке есть объект у которого кусочек вот так выглядит".
источник

VS

Vlad Shulyar in PHP
Но там ужаснейший говнокод, но вроде не подводил ниразу ещё (после финальных правок в нем естественно)
источник

大郑

大帅 郑 in PHP
I see
источник

ED

Erikson Donald in PHP
Create a channel
источник

АГ

Алексей Гевондян... in PHP
Sergey Protko
Подниму вопрос - кто пользуется какими либками для phpunit/etc для матчинга структур данных? Есть убогий coduo/php-matcher (бесполезный комбайн), есть phpunit array subset (оч ограниченные возможности). Что хочу - что-то больше похожее на то что можно в JS увидеть аля...

expect(data).toEqual(expect.arrayContains([
   expect.objectContains({
       partial: {objectKey: "value"}
   })
])
assertEqualsCanonicalized или как там его
источник

АГ

Алексей Гевондян... in PHP
ну а так да - просто assertSame(['some', 'data'], $obj->some->internal['field'])
источник

АГ

Алексей Гевондян... in PHP
assertArrayHasKey('key', $some->array); assertSame(['data'], $some->array[0]), в общем вот это вот все. проверяются отдельные части массива / объекта. не одним ассертом, а пачкой ассертов, возможно ассертами в цикле, возможно даже во вложенных циклах / методах с ассертами проверять структуру объектов
источник

АГ

Алексей Гевондян... in PHP
например у нас есть отчет, который содержит вагон данных. юнит тест собирает этот объект, потом целая пачка методов с ассертами, которые проверяют разные его части на соответствие ожидаемым значениям
источник

SP

Sergey Protko in PHP
Ну вот это ж говно и хочется от этого уходить
источник

АГ

Алексей Гевондян... in PHP
источник

ЕР

Евгений Ромашкан... in PHP
Sergey Protko
писать свой?
Там не много ведь)
источник

АГ

Алексей Гевондян... in PHP
источник

АГ

Алексей Гевондян... in PHP
ну да, нет ассертов на вхождение некоего массива / объекта в другой массив / объект. но так или иначе структура известна, и можно серией ассертов ее проверить. не вижу в этом говнокода, норм вроде
источник

АГ

Алексей Гевондян... in PHP
Sergey Protko
Подниму вопрос - кто пользуется какими либками для phpunit/etc для матчинга структур данных? Есть убогий coduo/php-matcher (бесполезный комбайн), есть phpunit array subset (оч ограниченные возможности). Что хочу - что-то больше похожее на то что можно в JS увидеть аля...

expect(data).toEqual(expect.arrayContains([
   expect.objectContains({
       partial: {objectKey: "value"}
   })
])
например этому будет соответствовать assertSame('value', $data[0 /* 2,3 смотря где ожидается*/]->partial->objectKey). ну а проверять что "где-то в массиве объектов есть объект с таким значением"... хм... странновато, а остальное не надо проверять? и прям никак не известно, где именно оно находится? в таком случае можно какую-нибудь либу для работы с коллекциями найти (фильтрации, поиски, получение по xpath / пути и т д), те же ларовские коллекции много что позволяют сделать. например иногда так делаем: assertSame([1, 2, 3], collect($someModels)->pluck('id')->all())
источник

АГ

Алексей Гевондян... in PHP
хотя тут и просто array_column прокатил бы
источник

SP

Sergey Protko in PHP
Алексей Гевондян
например этому будет соответствовать assertSame('value', $data[0 /* 2,3 смотря где ожидается*/]->partial->objectKey). ну а проверять что "где-то в массиве объектов есть объект с таким значением"... хм... странновато, а остальное не надо проверять? и прям никак не известно, где именно оно находится? в таком случае можно какую-нибудь либу для работы с коллекциями найти (фильтрации, поиски, получение по xpath / пути и т д), те же ларовские коллекции много что позволяют сделать. например иногда так делаем: assertSame([1, 2, 3], collect($someModels)->pluck('id')->all())
Ну тоесть "пишиисам мне норм говно по тестам размазывать"
источник