Ошибка `No expectations were specified` возникает, когда Mockery вызывает метод на моке, но для этого вызова не настроено ожидание. Это происходит, потому что вы не указали, что именно должен возвращать метод `factory`.
Метод `factory` должен возвращать объект транзакции, который передаётся в `doTransaction`. Из кода видно, что вы используете `$this->tm->doTransaction($transaction)`, где `$transaction` — результат вызова `factory`. Значит, вам нужно создать мок для транзакции и вернуть его.
Пример исправления:
// Создаём мок объекта транзакции
$transaction = Mockery::mock(TransactionInterface::class); // Или конкретный класс транзакции, если он известен
// Настраиваем ожидания для factory
$this->insertOnDuplicateKeyUpdateTransactionFactory->shouldReceive('factory')
->once()
->with(
ProductQueue::class,
$trData,
[ProductQueue::TABLE_COLUMN_MPN_PRODUCT_ID]
)
->andReturn($transaction); // Возвращаем мок транзакции
// Настраиваем вызов метода doTransaction с этим объектом
$this->tm->shouldReceive('doTransaction')
->once()
->with($transaction)
->andReturnNull(); // Или результат метода doTransaction, если он возвращает что-то
Теперь тест корректно проверяет вызовы `factory` и `doTransaction`.