问题标签 [laravel-testing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
592 浏览

testing - 身份验证测试运行异常

我刚刚尝试为以下内容编写一个简单的测试Auth

这是代码:

当我运行时,出现以下错误:

我的问题是:

  1. 两个相似的测试用例,但为什么错误输出不同?第一个模拟Auth::guest()没有被调用,而第二个似乎被调用。

  2. 在第二个测试用例中,为什么会失败?

  3. 有没有办法为我上面的代码编写更好的测试?甚至更好的代码来测试。

  4. 在上面的测试用例中,我Mockery用来模拟AuthManager,但是如果我使用外观Auth::shoudReceive()->once()->andReturn(),那么它最终会起作用。Mockery这里和Auth::mock门面有什么不同吗?

谢谢。

0 投票
1 回答
2713 浏览

laravel - Laravel 单元测试迁移失败

我正在尝试运行 PHPUnit 测试。我已经为测试环境设置SQLite了。:memory在我的设置中,我调用Artisan::call('migrate')但随后出现以下错误:

一般错误:1 无法添加默认值为 NULL 的 NOT NULL 列(SQL:alter table "admins" add column "title" text not null)

基本上,任何修改现有表的迁移文件都会返回错误。为什么?

这是抱怨的文件迁移:

0 投票
1 回答
2264 浏览

php - Laravel PHPUnit PDOException 异常

我不知道为什么当我运行 PHPUnit 测试时,我收到以下错误:

PDOException: SQLSTATE[HY000] [2002] 没有这样的文件或目录

我的测试环境数据库设置是:

我使用 MySQL 与 SQLite 相反的原因是因为我的迁移文件使用dropColumn了 SQLite 不支持的。我在设置中调用迁移Artisan::call('migrate')

如果我实际上在终端中手动调用迁移,php artisan migrate --env=testing则迁移成功并创建数据库。

为什么我会面临上述问题?

0 投票
1 回答
1071 浏览

php - Laravel 4.2:使用 assertRedirectedToRoute 测试失败

我想知道是否有其他人遇到过这个问题。我正在阅读 Jeffrey Way 的关于 Laravel 测试的书,我正在阅读解释如何测试控制器的章节。

当我按照书中的例子进行操作时 - 我得到了这样的信息:

无法断言 Illuminate\Http\Response 对象 (...) 是“Illuminate\Http\RedirectResponse”类的实例。

我的测试如下:

以及控制器中非常简单的方法(只是为了测试这个特定的场景):

从我可以看到的AssertionsTrait::assertRedirectedTo检查例如Illuminate\Http\RedirectResponse

这应该可以正常工作,因为 Redirect 门面解析为 theIlluminate\Routing\Redirector及其route()方法调用createRedirect(),它返回 - 的实例,Illuminate\Http\RedirectResponse所以不太确定是什么原因造成的。

更新:

刚刚再次检查了代码,看起来问题出在AssertionsTrait::assertRedirectedTo()方法内。调用$this->client->getResponse()返回实例Illuminate\Http\Response而不是Illuminate\Http\RedirectResponse- 因此$this->assertInstanceOf('Illuminate\Http\RedirectResponse', $response)调用失败。但我仍然不确定为什么 - 我正在扩展TestCase应该负责所有环境设置等的扩展。知道吗?

0 投票
1 回答
775 浏览

unit-testing - 如何在 Laravel 5 中从 TestCase 调用命令行

我正在 Laravel 5 中开发一个应用程序,我有一个扩展自 的测试文件TestCase.php,我需要phpcs在我的文件中调用该命令

在这里的示例http://laravel.com/docs/5.0/testing我刚刚找到了这个this->call函数,我认为这对我来说不是正确的选择,因为它正在返回一个response对象,正确的方法是什么它?我应该使用哪个类和函数在此类中运行命令行我还需要将命令的结果保存在变量中

0 投票
0 回答
420 浏览

php - Laravel SQLite 不会级联删除

我正在使用内存中的 SQLite 来测试我的 Laravel 应用程序。然后我以这种方式定义一个表 Enterprise:

地址架构:

但是,当我运行测试时

测试在第二个断言中失败,它没有在级联中删除:(

有谁知道解决办法??

0 投票
2 回答
2197 浏览

laravel - Laravel PHPUnit:如何测试 url 前缀

我正在学习构建一些 PHPUnit 测试。我的应用程序在不使用前缀时重定向到默认语言,例如:www.myapp.com 有 301 重定向到 www.myapp.com/en,而 www.myapp.com/en 有 200 OK。

试图对我的控制器进行测试,我有以下代码

响应为 301(由于此语言前缀检查)。如何使用前缀测试这些控制器?谢谢

0 投票
2 回答
142 浏览

php - 错误:在 Laravel Test SetUp() 上创建记录时找不到基表或视图?

在创建记录时setUp()

我收到以下错误:

Base table or view not found

use DatabaseMigrations;在我的TestCase. 可能是迁移在 testCase 开始之前运行,所以当 `setUpz 运行时还没有创建表。

使用Laravel 5.1

目前,我必须通过在每次测试中创建此记录来重复自己。

任何想法如何使这项工作?

0 投票
1 回答
2374 浏览

laravel - 嘲弄:模拟对象上不存在方法

所以我有一个我正在模拟的对象,它有用于发送电子邮件的方法。我已经从一个静态类转到了一个具体类,因为我在使用 Mockery 测试静态类时遇到了问题。

但是,我现在发现,当保存一个雄辩的模型时,它会引发一个触发侦听器的事件。这个监听器负责启动对模拟对象方法的调用。

我发现当我执行以下操作时,它会起作用。

每次抱怨模拟对象上不存在该方法时都会失败,最糟糕的是,如果我进入调用模拟对象方法的侦听器并执行类似的操作

它表明该方法实际上位于从 get_class_methods 返回的方法数组中。

现在这是踢球者。如果我执行以下操作,一切正常,并且测试通过且没有任何错误:

现在我一直在阅读Mockery Gotchas并且看起来如果我的类正在调用对象上真正不存在的方法,___call那么这个错误将是预期的。

但是,我的邮件程序类没有扩展任何其他具有__call方法的类,也没有在该类上定义该方法。

然而,你可能知道也可能不知道 Eloquent 模型实际上使用了魔法___call方法。但是我不是用 Mockery 模拟模型,我在 Laravel 中使用工厂模型,但我也没有检查方法调用的模型对象,我正在检查我的具体邮件类以进行方法调用。

任何人都知道为什么我可能会从 Mockery 那里得到这种行为?

我正在使用以下代码在 Laravel 5.2 中创建我的模拟对象

0 投票
0 回答
483 浏览

laravel - 不触发缓存事件的 Laravel 测试

我在测试时使用数组缓存驱动程序,但是我想禁用缓存事件。

我可以做到这一点

但是,我宁愿停止一个事件

如果未调用事件,将抛出错误。

一种解决方案是在外部允许事件触发并隐藏它但如果事件没有发生则不会抛出错误的函数。

我想我需要像这样模拟事件调度程序

问题是如何继续调度未捕获的事件?