我想知道,是否有一种简单直接的方法可以使用 Laravel 的新 Mailable 功能来测试电子邮件的主题
我有一个类可以发送 5 封不同的电子邮件,但它们都发送给同一个人,因此测试电子邮件是否发送给具体的人并不是真正的完整测试。我需要知道是否向具体的人发送了具体的电子邮件。
我认为,使用电子邮件的主题来测试唯一性是最好的方法。如果你有更好的方法请告诉我。
我有这个:
Mail::assertSentTo([Config::get('mail.backend')], SendEmail::class);
我想添加这样的东西
邮件:: assertSubject ('我的主题', SendEmail::class);
有没有办法做到这一点??
谢谢!
我正在开发一个 Laravel 应用程序。我在我的应用程序中使用 Laravel Broadcast。我现在想做的是测试 Laravel 中是否广播了一个事件。
我正在广播这样的事件:
broadcast(new NewItemCreated($item));
Run Code Online (Sandbox Code Playgroud)
我想测试该事件是否被广播。我该如何测试它?我的意思是在单元测试中。我想做类似的事情
Broadcast::assertSent(NewItemCreated::class)
Run Code Online (Sandbox Code Playgroud)
该事件在创建项目时触发的观察者事件中广播。
这是响应:
[
{
"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 项目中,我想测试一个 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 响应中的数组计数?
我正在使用 Laravel 做一个数学竞赛项目。项目中的所有控制器方法都使用了大量的 time() 函数。
根据当前时间是否在比赛直播时间之间向用户返回问题。
在编写功能测试和单元测试时,如何模仿控制器中的 time() 函数,以便在为项目运行测试时设置所需的时间?
当我检查方法 in dd(\Auth()::check());case时,它会返回,但是当我使用in方法 in时,它会返回。testLoginTrueLoginTesttruedd(\Auth()::check());testClientCreateFormDisplayedClientTestfalse
那么如何在另一个测试用例中获取登录用户呢?在每个测试用例之前都需要登录用户吗?
我正在 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,但无法从测试中的主应用程序访问配置变量。在我的包中,我没有任何配置。我可以模拟配置文件夹或类似的东西吗?
谢谢你!
我正在开发 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 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)
任何人都可以解释这个错误的原因吗?