Laravel PHPUnit получает «ErrorException: Illegal string offset 'address'» при тестировании метода Maillable hasFrom (...)

Вот мой класс Mailable:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class OrderConfirmation extends Mailable
{
    use Queueable, SerializesModels;

    public $message;
    public $subject;
    public $from;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($message, $subject, $from)
    {
        $this->message = $message;
        $this->subject = $subject;
        $this->from = $from;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from($this->from)
            ->subject($this->subject)
            ->view('emails.orders.confirmation');
    }
}

Я пытаюсь проверить, есть ли у почты определенный адрес отправителя, например:

Mail::fake();
$customer = '[email protected]';
$from = '[email protected]';
Mail::to($customer)->queue(new OrderConfirmation('Some Message', 'Some Subject', $from));

Mail::assertQueued(OrderConfirmation::class, function ($mail) {
     return $mail->hasFrom('[email protected]');
});

но он получает «ErrorException: недопустимое смещение строки 'адрес'»

/var/www/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php:597

Laravel 5.6

Это ошибка или я что-то не так делаю?

Какую версию Laravel вы используете? Можете ли вы также добавить свой класс OrderConfirmation?

Rwd 08.09.2018 12:25

Добавлено в топ

Timkolm 08.09.2018 16:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
2
736
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина возникновения этой проблемы в том, что вы переопределяете свойство $from в классе Mailable.

Вы можете удалить свойство $from, которое вы настроили в классе, и вызвать метод from() из конструктора:

public $message;

public function __construct($message, $subject, $from)
{
    $this->message = $message;
    $this->subject = $subject;
    $this->from($from);
}

public function build()
{
    return $this->view('emails.orders.confirmation');
}

В качестве альтернативы вы можете переименовать свойство $from во что-то вроде $fromAddress.

NB То же самое происходило и с subject, но поскольку метод subject() просто существует для присвоения значения свойству объекта в классе, на самом деле это не вызывает проблемы.

О, черт возьми! Я просто совершенно забыл, что этот класс расширяет Mailable! Спасибо, что указали на это!

Timkolm 08.09.2018 20:02

Другие вопросы по теме