php - 如何防止 laravel 在测试中触发事件?
问题描述
我刚刚写了一个 laravel Observer。它附加到Company
模型上,因为我想知道创建公司的用户。我有一大套使用工厂来建立公司的其他测试。这些测试现在失败了,因为观察者需要一个用户,但在调用工厂时没有用户登录。
CompanyObserver.php
class CompanyObserver {
function created(Company $company) {
info('USER ' . Auth::user()->id . ' created the new company ' . $company->id . '.';
}
}
OldTests.php
Class OldTests {
function testSomething() {
// Now fails because observer is triggered but no use is logged in.
$company = factory(Company::class)->create();
// Random request
$this->post('getCompany/' . $company->id)->assertStatus(200);
}
}
我如何处理需要用户登录以进行旧测试的新观察者?我必须去改变我所有的旧测试吗?
解决方案
在 Laravel 8 中,这应该可以工作。
$company = Company::withoutEvents(function () {
return Company::factory()->create();
});
推荐阅读
- java - 我在运行使用 javax.tools.JavaCompiler 编译的代码时遇到问题
- javascript - 用于使元素在滚动后消失并重新出现的 Javascript
- visual-studio-2017 - VS 2017:如何禁用“Hopex Module Publisher”插件的重复自动安装?
- c - __declspec(dllexport) 导入时。好像没什么区别?
- php - WooCommerce 在类别/商店页面上显示星级和计数
- java - 为每个消费者简化
- tampermonkey - 更改 UserScript 的 @namespace 键有什么后果?
- r - is.data.frame(x) 中的错误:不能强制“list”对象键入“double”
- php - PHP 注意:类 mysqli_result 的对象无法转换为 int
- vue.js - 如何从 NuxtJS 中的 fetch 或 asyncData 挂钩访问 vuex 存储?