问题标签 [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 投票
1 回答
2344 浏览

php - 模拟静态 Eloquent 模型方法,包括 find()

我一直在关注一般的 Mockery 和 PHP-Unit 教程——包括 Jeffrey Way 对使用 PHP-Unit 和 Mockery 测试 Laravel 的介绍。但是,对于这个应用程序 - 我们对 Eloquent 的依赖很好,并且宁愿不创建存储库类。

我们能够很好地模拟 Widget 模型的实例方法。但是,我们正在使用 Route:model 绑定,我承认在测试控制器的 show($widget) 方法时,我不确定如何模拟模型的 find() 方法。

我已经阅读了https://github.com/padraic/mockery/wiki#mocking-public-static-methods文档,并看到可以在要模拟的类前面放置一个“别名”前缀。但我似乎也无法让它发挥作用。

这里是 routes.php...

这是(缩短的)控制器......

这是测试夹具。

testShow 方法的错误是:调用未定义的方法 Widget::find()

想法?

0 投票
1 回答
329 浏览

laravel - Codeception sqlite:Laravel 4 中针对 Mockery 的内存

我注意到 Codeception 有sqlite:memory. 在这种情况下,我应该选择退出Mockery吗?

我的理解是 Mockery 使测试能够避免命中数据库。通过上面提到的 Codeception 选项,我可以使用示例数据为数据库播种并在内存中命中它。

当我将它与 Selenium2 和 PhantomJS 放在一起时,一些测试在 Laravel 4 中从 15 秒缩短到 1 秒。

0 投票
1 回答
2313 浏览

unit-testing - 使用 Mockery 进行 Laravel 控制器测试

我尝试在 laravel 中用嘲弄来测试我的控制器动作。我已经在这里阅读了本教程:

http://culttt.com/2013/07/15/how-to-structure-testable-controllers-in-laravel-4/

我在构造函数中使用 DI,如下所示:

我的问题是我的控制器中的以下代码:

我正在尝试将 Mockery 用作模拟框架。我的问题是如何模拟 $this->sentry->getUserProvider() 之类的调用(Cartalyst Sentry 是一个高级授权包)。为了模拟我写的用户模型:

知道如何模拟 Userprovider 或者我应该以其他方式处理吗?如果我根据 id 获取用户详细信息,我想测试我的 UserController。

0 投票
3 回答
5085 浏览

php - Mocking models with a relationship in Laravel

I'm attempting to create a Mockery of CustomObject then chain the retrieval of OtherObject onto it using something identical to

I can't seem to figure out how to mock this ->get() at the end there. I'm mocking both of those models in my constructor method ['Eloquent', 'OtherObject', 'CustomObject']. If I remove the ->get() everything runs smoothly and my tests pass (aside from the php errors the view is then giving me, but those don't matter if the test is working correctly).

What I currently have is this:

What should I be doing to mock this?

Edit: I have specifically attempted ->andReturn($this->mock) which only tells me that on the mocked object there is no get method.

0 投票
1 回答
1118 浏览

php - 嘲笑没有从存储库(接口)调用方法

我正在尝试用这个测试来测试我的控制器(如果这很重要,我正在使用 Laravel):

按照这些教程http://culttt.com/2013/07/08/creating-flexible-controllers-in-laravel-4-using-repositories/ http://culttt.com/2013/07/15/how-to -structure-testable-controllers-in-laravel-4/我使用存储库来避免将我的数据库耦合到测试。所以我有这两个额外的课程:

当我运行测试时,我得到这个错误:

有 1 个错误:

1) ProjectControllerTest::testIndex Mockery\Exception\InvalidCountException: 来自 Mockery_2143809533_Dumminvoicing_Storage_Project_ProjectRepositoryInterface 的方法 all() 应准确调用 1 次,但调用 0 次。

控制器的 index 方法在浏览器中运行良好:

那么为什么它在测试中失败了呢?为什么不调用“全部”?

0 投票
1 回答
1566 浏览

php - PHP单元测试如何模拟不可调用的方法

在我要测试的功能中,我进行了以下检查

如何测试异常?

如何制作包含不可调用或可能是属性的方法的MOCKERY对象?我不知道。

0 投票
1 回答
331 浏览

testing - 如何使用 Mockery 测试使用 Ardent 模型的控制器?

我正在尝试在 Laravel 控制器中测试此功能:

我的(错误的)测试如下所示:

问题是,基本上,当验证失败时,Ardent 将 $project 设置为 false,但它也会在同一个对象上设置错误,可以使用 ->errors()->all() 检索这些错误。

我很迷茫,试图找出在模拟中返回什么。

注意:构造函数注入模型:

0 投票
3 回答
5944 浏览

php - mockery->shouldReceive() 什么时候不应该通过?

我正在使用 phpunit 和 mockery 在 laravel 中学习单元测试。我目前正在尝试测试 UsersController::store()。

我正在嘲笑用户模型并使用它来测试索引方法,这似乎有效。当我取出 $this->user->all() 测试失败并且它通过时。

在测试 store 方法时,虽然我使用模拟来测试用户模型是否收到 validate() 一次。store 方法为空,但测试通过。为简洁起见,我省略了课程中不相关的部分

用户控制器测试.php

0 投票
1 回答
1311 浏览

unit-testing - 即使调用 withAnyArgs(),laravel phpunit 模拟方法也需要一个数组?

下面是我的控制器类和相关方法以及我的测试类和相关测试。当模拟方法 $this->user->update() 运行时,我收到此错误

除非另有定义,否则模拟方法不应该接受我发送的任何参数吗?即使我将模拟对象方法更改为包含 with(m::type'string') 我也会收到相同的错误。最终,第一个参数将是一个字符串,第二个参数将是一个数组,但我什至无法做到这一点。

用户控制器.php

用户控制器测试.php

0 投票
1 回答
2090 浏览

php - Laravel 4 (Mockery) 中的模拟回调

我目前正在为 Laravel 4 中的包编写测试。

我在嘲笑Illuminate\Database\Query\Builder它几乎一直有效,除了当where方法使用回调时,我无法检查回调中的方法是否被调用。

我希望你们中的一个人能有所启发。

where以及应该调用的实际方法orWhere注意:该构建器模拟被传递给下面的类。

然后调用$builder->filter()which 包含以下代码。

主要部分是底部位$query->orWhere,PHPUnit 测试每次都失败,因为它orWhere甚至一次都没有运行。在您说它可能无法执行之前continue,我传递的数据将允许这样做。

我怀疑这是因为我一开始就嘲笑这个where方法。如果我exit在它之前包含一个foreach它不会执行,表明它甚至没有在回调中运行任何东西。我知道这是默认行为,但如何让 Mockery 运行相同/相似的回调?

我尝试过使用部分模拟,使用shouldExpect但不完全理解它。我也尝试过四处搜索,但这种情况没有运气。

如果我能学习如何在回调中使用嘲弄,那就太好了。