标签: laravel-testing

如何使用 Laravel 的 Mailable 测试电子邮件的主题

我想知道,是否有一种简单直接的方法可以使用 Laravel 的新 Mailable 功能来测试电子邮件的主题

我有一个类可以发送 5 封不同的电子邮件,但它们都发送给同一个人,因此测试电子邮件是否发送给具体的人并不是真正的完整测试。我需要知道是否向具体的人发送了具体的电子邮件。

我认为,使用电子邮件的主题来测试唯一性是最好的方法。如果你有更好的方法请告诉我。

我有这个:

Mail::assertSentTo([Config::get('mail.backend')], SendEmail::class);

我想添加这样的东西

邮件:: assertSubject ('我的主题', SendEmail::class);

有没有办法做到这一点??

谢谢!

unit-testing mocking laravel-5 laravel-testing

4
推荐指数
1
解决办法
3526
查看次数

如何测试/断言 Laravel 中是否广播事件

我正在开发一个 Laravel 应用程序。我在我的应用程序中使用 Laravel Broadcast。我现在想做的是测试 Laravel 中是否广播了一个事件。

我正在广播这样的事件:

broadcast(new NewItemCreated($item));
Run Code Online (Sandbox Code Playgroud)

我想测试该事件是否被广播。我该如何测试它?我的意思是在单元测试中。我想做类似的事情

Broadcast::assertSent(NewItemCreated::class) 
Run Code Online (Sandbox Code Playgroud)

附加信息

该事件在创建项目时触发的观察者事件中广播。

laravel laravel-testing laravel-events laravel-broadcast

4
推荐指数
1
解决办法
6323
查看次数

Laravel测试:如果需要检查多个级别,则assertJsonFragment失败

这是响应:

[  
  {  
    "data":{  
      "locales":{  
        "translate":[  
          {  
            "created_at":"2018-05-28 12:49:53",
            "deleted_at":null,
            "id":1,
            "key":"nl_NL",
            "name":"Netherlands (Nederlands)",
            "updated_at":"2018-05-28 12:49:53"
          }
        ],
        "validate":[  
          {  
            "created_at":"2018-05-28 12:49:53",
            "deleted_at":null,
            "id":2,
            "key":"it_IT",
            "name":"Italian (Italiano)",
            "updated_at":"2018-05-28 12:49:53"
          }
        ]
      }
    },
    "error":false,
    "message":null
  }
]
Run Code Online (Sandbox Code Playgroud)

我想断言以下片段是响应的一部分:

1) ['translate' => [['key' => 'nl_NL']]]
2) ['validate'  => [['key' => 'it_IT']]]
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以断言该translate数组至少包含一个键为的元素nl_NL并且validate包含一个键为的元素it_IT

$response->assertSuccessful()->assertJsonFragment([
    'translate' => [['key' => 'nl_NL']],
    'validate'  => [['key' => 'it_IT']
]);
Run Code Online (Sandbox Code Playgroud)

laravel-5 laravel-testing

3
推荐指数
1
解决办法
942
查看次数

如何在 Laravel 8 中测试 AssertableJson 中的数组?

在我的 Laravel 项目中,我想测试一个 JSON 响应,它实际上是带有data键的分页器结果。它是一个数组,包含一些元素。我们不知道确切的数量,因为它来自一个函数。

我的问题是,如果分页限制为 10,并且我将元素数量更改为超过分页限制(例如 20),我仍然只能返回 10 个元素。但我也想测试一下。

现在我有这个代码:

$response
    ->assertSuccessful()
    ->assertJson(function (AssertableJson $json) use ($allElementsCount) {
        $json
            ->has('data')
            ->whereType('data', 'array')
            // here I want to test the count of 'data' array
            ->etc();
    });
Run Code Online (Sandbox Code Playgroud)

如何测试 JSON 响应中的数组计数?

testing laravel laravel-testing laravel-8

3
推荐指数
1
解决办法
4070
查看次数

在 Laravel 中测试时如何模拟 time() 函数?

我正在使用 Laravel 做一个数学竞赛项目。项目中的所有控制器方法都使用了大量的 time() 函数。

根据当前时间是否在比赛直播时间之间向用户返回问题。

在编写功能测试和单元测试时,如何模仿控制器中的 time() 函数,以便在为项目运行测试时设置所需的时间?

php testing laravel laravel-testing

2
推荐指数
1
解决办法
6326
查看次数

我如何在 laravel phpUnit 测试的另一个测试用例中登录用户?

图1

当我检查方法 in dd(\Auth()::check());case时,它​​会返回,但是当我使用in方法 in时,它会返回。testLoginTrueLoginTesttruedd(\Auth()::check());testClientCreateFormDisplayedClientTestfalse

图2

那么如何在另一个测试用例中获取登录用户呢?在每个测试用例之前都需要登录用户吗?

phpunit laravel laravel-testing

2
推荐指数
1
解决办法
4977
查看次数

在 laravel 中测试包时访问配置变量

我正在 Laravel 中编写一个测试,我想对这段代码进行单元测试:

if (file_exists(\Config::get('maintenance.dir.api'))) {
        throw new ServiceUnavailableException('We are down for maintenance');
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用Illuminate\Foundation\Testing\TestCase,但无法从测试中的主应用程序访问配置变量。在我的包中,我没有任何配置。我可以模拟配置文件夹或类似的东西吗?

谢谢你!

testing laravel laravel-testing

1
推荐指数
1
解决办法
2410
查看次数

Laravel 单元测试当 Eloquent 模型事件被触发时是否触发事件

我正在开发 Laravel 应用程序并编写测试。现在,我在编写测试时遇到问题,该测试断言在触发雄辩模型事件时是否触发事件。这就是我正在做的事情。

这是我的 ItemObserver 创建的函数

public function created(Item $item)
{
    event(new NewItemCreated($item));
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在雄辩模型观察者的创建事件内触发一个事件。

如果我想断言测试中是否触发了事件,我必须伪造该事件,然后断言类似这样的事情。

Event::fake();
factory(Item::class)->create(); //created function of observer should be triggered but it will not be
Event::assertDispatched(NewItemCreated::class);
Run Code Online (Sandbox Code Playgroud)

正如您在测试代码中看到的,我试图断言创建项目时是否触发事件。但是测试永远不会通过,因为观察者类的创建函数永远不会被调用,因为事件在测试中是伪造的。我如何测试这个场景?

laravel laravel-testing laravel-events

1
推荐指数
1
解决办法
2542
查看次数

Laravel 6/7 测试:尚未设置外观根

我正在尝试为我的 Laravel 7 应用程序编写一些测试。但我一直面临A facade root has not been set.错误。

<?php

namespace Tests\Feature;

use Illuminate\Support\Facades\Config;
use PHPUnit\Framework\TestCase;

class AddressListenerRepositoryTest extends TestCase
{
    public function testCreate()
    {
        Config::set('x', 'address_listeners'); // Cause of "A facade root has not been set" error
    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这个错误的原因吗?

phpunit laravel laravel-testing laravel-7

1
推荐指数
1
解决办法
1215
查看次数