Laravel PHPUnit получает «ErrorException: недопустимое смещение строки« адрес »» при тестировании метода Maillable hasFrom (...) - PullRequest
0 голосов
/ 08 сентября 2018

Вот мой класс 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 = 'test@test.com';
$from = 'from@test.com';
Mail::to($customer)->queue(new OrderConfirmation('Some Message', 'Some Subject', $from));

Mail::assertQueued(OrderConfirmation::class, function ($mail) {
     return $mail->hasFrom('from@test.com');
});

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

/ вар / WWW / поставщика / Laravel / рамки / SRC / Осветите / Почта / Mailable.php: 597

Laravel 5.6

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

1 Ответ

0 голосов
/ 08 сентября 2018

Причиной возникновения этой проблемы является то, что вы переопределяете свойство $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() просто присваивает значение свойству субъекта в классе, это на самом деле не вызывает проблемы.

...