问题标签 [mockery]

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 投票
2 回答
1723 浏览

php - 无法模拟 Model::where() 并阻止测试查询数据库

在我的控制器中,我使用MyModel::where(...)的是在我的一项测试期间调用数据库。我以为我可以用以下内容重载它,但它仍在查询数据库。我可以做些什么来确保我的测试仍然需要::where被调用但返回一个模拟模型,以便我可以继续测试这个控制器方法的其余部分?

0 投票
1 回答
683 浏览

php - 如何深度模拟支持链接方法的类

我正在尝试对我拥有的控制器进行单元测试,$this->library->client->changeLog->create()我想知道是否需要模拟这些属性中的每一个,或者我是否可以以某种方式进行深度模拟$this->library,这样我就不必模拟一长串对象并且还必须担心它们的构造函数参数。我现在正在尝试模拟一条链条,它非常丑陋,而且效果不佳。

我也尝试过$this->library->shouldReceive('client->changeLog->create')->once()->andReturn(true);,但它导致“试图获取非对象的属性。

有没有一种简单的方法来测试具有一些属性的方法的输出?

0 投票
1 回答
1636 浏览

php - Laravel 控制器测试,处理重定向

我有一点问题,下面的代码来自我正在测试的控制器中的一种方法。

场景是,您保存了一条记录,然后您将自动定向到“查看”该记录。所以我在保存到重定向时传递了项目ID......

但是,在运行测试时,如果我直接传入对象的 id,则会收到“ErrorException: Trying to get property of non-object”。所以围绕我做通过测试的工作是一个三元条件,看看输出是否是一个对象......当然必须有更好的方法来做到这一点?

我正在使用 Mockery,并为 Projects 模型创建了一个模拟类/接口,该模型被注入到 Projects 主控制器中。

这是方法:

这是测试重定向路由的测试。

0 投票
2 回答
4785 浏览

php - Laravel - 输入未通过单元测试

运行单元测试时,我收到以下错误。似乎它不喜欢将 Input::get 传递给构造函数,但是在浏览器中运行脚本时,该操作工作正常,所以我知道它不是控制器代码。如果我取出任何“task_update”代码,即使使用输入,测试也会通过 find - 所以不确定为什么它接受一种方法的输入。

我的控制器是:

测试是 - 我正在为 task_updates 数组设置输入,但没有被拾取:

0 投票
3 回答
6098 浏览

php - 在 Mockery 中测试链式方法调用

我正在尝试在控制器中正确模拟对 Eloquent 模型的链式调用。在我的控制器中,我使用依赖注入来访问模型,以便它应该易于模拟,但是我不确定如何测试链接调用并使其正常工作。这一切都在使用 PHPUnit 和 Mockery 的 Laravel 4.1 中。

控制器:


控制器测试:


我一直试图通过将此代码放在$this->action()测试中的调用之前来实现这一点。

但是,这会导致错误Fatal error: Call to a member function with() on a non-object in /app/controllers/TextbooksController.php on line 28

我还尝试了一种链式替代方案,希望它能起到作用。

用 Mockery 测试这个链式方法调用的最佳方法是什么。

0 投票
1 回答
2246 浏览

unit-testing - Laravel - 测试仓库

我需要测试一个存储库,该存储库具有通过构造函数注入的 Eloquent 模型。

我的问题是当我调用$this->model->value_products(或任何属性)时。Eloquent 模型尝试调用模拟模型setAttribute中不存在的方法。如果我模拟此方法,我将无法正确设置属性,并且我的测试断言将失败。

这是我的测试:

对此有什么想法吗?

0 投票
2 回答
1954 浏览

unit-testing - 使用 Mockery 测试 Laravel 控制器的问题 | 试图获取非对象的属性

我对测试控制器非常陌生,并且遇到了方法()的问题。我相信我要么在测试中遗漏了一些东西,要么我的控制器/存储库设计不正确。

我正在编写的应用程序基本上是那些安全的“一次性”工具之一。在您创建笔记的地方,系统会为您提供一个 URL,一旦检索到该 URL,该笔记就会被删除。我实际上已经编写了应用程序,但我要回去编写练习测试(我知道这是倒退的)。

我的控制器:

我已经将我的 Note 接口注入到我的控制器中,一切都很好。

我的测试

我得到的错误

第 24 行是指在我的控制器中找到的这一行:

基本上我的抽象存储库方法 delete() 显然找不到 $note->id 因为它在测试环境中确实不存在。我应该在测试中创建一个注释并尝试实际删除它吗?或者那应该是一个模型测试?如您所见,我需要帮助,谢谢!

-----更新-----

我试图存根存储库以返回一个 Note 对象,正如 Dave Marshall 在他的回答中提到的那样,但是我现在收到另一个错误。

我的存储库中确实有一个 delete() 方法,当我在浏览器中测试我的路由时,我知道它正在工作。

0 投票
1 回答
1978 浏览

php - 使用 mockery 对具有依赖关系的类进行单元测试

我是测试新手,我正在尝试创建一个单元测试,涵盖 NewsCreator create 方法中的第一个 if 语句。

这个问题有两个部分。

第一:我应该如何实例化 NewsCreator 来处理模拟的验证器和存储库?

第二:测试这条路径的正确方法是什么?

这是我的控制器方法,它调用需要测试的类:

这是我想测试的类,NewsCreator:

这是我尝试编写的测试,但失败并出现异常:

2) WHS\Portal\Tests\News\NewsCreatorTest::test_failed_validation Mockery\Exception\InvalidCountException: Method fails("foo") from Mockery_1_WHS_Portal_News_NewsValidator should be called exactly 1 times but called 0 times.

更新测试:

存根类:

请帮忙。

谢谢。

0 投票
2 回答
479 浏览

php - How to get Mockery to work with a demeter chain

I have a Slim application that has some Middleware.

It performs authentication for the route, and retrieves the route like so:

I'm now testing it and am attempting to use Mockery to mock the result of the chained call, so I can effectively specify the route.

This doesn't work. It tries to call: require('lib/demeter/router.php') and fails as this doesn't exist.

I've also tried:

This doesn't work either, failing with:

What am I missing?

0 投票
1 回答
2351 浏览

php - Laravel 4.1 - 使用 Phpunit 和 Mockery 测试 Artisan 命令

我正在 Laravel 4.1 中编写我的第一个 Artisan 命令,并希望获得一些关于如何测试它的想法。我的命令做一件事(现在)。它基本上从数据库中删除指定天数的表条目(注释)。


命令示例:

该命令适用于出色的工作。但是我首先出于学习目的编写了该命令,现在我希望通过测试来遵循它。我正在使用 PHPUnit 和嘲弄。


命令代码: http: //pastebin.com/index/dZrxpt8x

如您所见,我正在注入我的 Note 实现(用于抽象),然后我正在执行其中一个方法“deleteNotesOlderThan(int $days)”。就像我说的,这一切都很好,花花公子。当我尝试测试事物时,我的问题就开始了。


命令测试: http: //pastebin.com/6UwxGvcN

如果您查看代码,您可以看到我被困在哪里。如何模拟我的 Note 方法并生成命令测试?另外我应该用这个特定的命令测试什么样的东西?

先感谢您