问题标签 [phpspec]

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 回答
1609 浏览

php - 致命错误:在 PHPSpec 上模拟时调用成员函数

这是我要测试的代码

这是我的测试代码

这是错误

我的问题是为什么我会收到这个错误,因为我已经在我的测试中模拟了哨兵?

0 投票
1 回答
2769 浏览

testing - PHPSpec中返回数组的测试内容

假设我有 RuleFactory 的这种方法:

我想测试返回数组是否包含 Rule 元素。这是我的测试:

但这不起作用,它会在 PHPSpec 中引发错误。

奇怪的是,我可以在其他返回数组的方法上很好地做到这一点,但由于某种原因,我不能在这里做到这一点。

我得到的错误是这样的:

如何在不创建自己的内联匹配器的情况下测试此返回数组的内容?

0 投票
1 回答
499 浏览

php - 如何使用 PHPSpec 和 Laravel 插入示例数据

我将环境更改为使用 sqlite 作为驱动程序在 basespec 上进行测试并存储在内存中。

每当我运行测试时,如何将信息插入测试数据库?现在测试失败了,因为它总是返回 false;

0 投票
0 回答
482 浏览

php - 如何使用 phpspec 有条件地检查对象?

我刚开始学习phpspec,我有一个问题。好的,您可以检查一个值是否等于某个其他值,如果您想查看某个值是否介于某些值之间,您可以创建一个如下所示的匹配器:

并进行类似的测试

但是你怎么能做有条件的呢?假设some_method()返回的值是 1,我们如何让 phpspec 查看正在测试的对象的另一个属性?

我正在做一个简单的骰子课。我希望每个掷骰子都返回并排列掷骰子的值和状态。如果掷骰子是最小值,则状态应该是“critical_miss”,如果掷骰子是最大值,状态应该是“critical_hit”。

所以,我想测试一下...

掷骰子。如果掷骰值为 1,掷骰值应介于 1 和 6 之间,掷骰状态应为“critical_miss” 如果掷骰值为 6,掷骰状态应为“critical_hit”

你能在phpspec中做这样的测试吗?

谢谢

0 投票
0 回答
570 浏览

php - phpspec,Doctrine:测试是否在实例化对象上设置了参数

我正在尝试开始使用 PHPSpec,但我碰壁了。为了在我被赋予使用的现有代码中模拟正确的东西,事情变得有点复杂,但本质上我的问题涉及测试在刚刚创建的对象上发生的事情。

我有RepositoryFactory一个createRepository(EntityManager $em, $entityName)

DoctrineEntityManager::getRepository($entityName)只是调用RepositoryFactory::getRepository(EntityManager $em, $entityName),如果存储库不存在,那调用RepositoryFactory::createRepository(EntityManager $em, $entityName)

因此,在我的测试中,存储库是从RepositoryFactory::getRepository.

现在,在孤立测试的答案开始出现之前,我意识到了这一点。我首先开始尝试编写对字段设置的检查,MyRepositoryFactory::createRepository但出现了同样的问题——如果我在 中制作对象createRepository,那么我没有可以使用 shouldBe/shouldHaveBeenCalled 进行测试的模拟。但是我正在尝试在这里做正确的事情,所以如果这是我测试的错误地方,我宁愿重构很多而不是通过一个hacky测试。

编辑:这是正在测试的实际位

上面的 $repo 应该在这里被嘲笑;parent::getRepository==> RepositoryFactory::getRepository==>RepositoryFactory::createRepository

此外,我知道测试进入了if($flag)块,但里面的代码不起作用。$this->getField()正常工作并返回,但$repo->setField仍收到 null。$repo->setField($field)是一个没有时髦逻辑的普通二传手。

0 投票
1 回答
610 浏览

travis-ci - 通过 travis-ci 运行 phpspec

我正在尝试通过 travis-ci 运行 phpspec。

规范在我的本地机器上运行良好,但在 travis 上找不到 phpspec 文件。

我的 travis.yml 看起来像这样:

语言:php

我的作曲家是这样的

关于如何使其工作的任何想法?

0 投票
1 回答
242 浏览

phpspec - 接受 phpsepc2 模拟中的所有参数

我如何使用#phpspec2 接受函数模拟中的所有参数?

例如我有这样的代码:

我不想模拟所有可能的参数,它应该接受每个实体。

0 投票
1 回答
97 浏览

exception - 如何使用 phpspec2 捕获异常

我试图用我的规范捕捉异常,但我不能让它工作。这是我的代码:

我做错了什么?

0 投票
0 回答
1153 浏览

unit-testing - 再次对 PhpSpec 存根和模拟感到困惑

我目前正在构建一个 Laravel 5 应用程序,并且对如何在 PhpSpec 中模拟事物感到困惑。

我正在构建一个时间表时间验证器,它需要根据所有当前时间表检查预期的时间表,并查看是否有任何重叠(事件不允许重叠)。

我需要提取有问题的时间表,以便我可以针对它们进行测试。目前,这是一个非常基本的 whereBetween 查询,但它会变得更加复杂,因为还会有重复的时间表来检查。

所以这是我的精简课程。我真的只是想测试 doesNotOverlap 函数。

这是我的规格

如果我这样运行它,我会得到:

我尝试(如您所见)各种注释掉的东西来模拟 $schedule 将返回的内容,但这似乎不起作用。

所以我想我想getSchedulesBetween在类中模拟受保护的方法,但是做这样的事情是$this->getSchedulesBetween($arg, $arg)->willReturn(blah)行不通的。

我是否需要将 getSchedulesBetween() 拉出班级并将其移至另一个班级,然后对其进行模拟?或者我是否需要将 $this->schedule->blah 推入 dotNotOverlap 方法,以便模拟 $schedule 将返回的内容?

我不想实际测试 App\Schedule Laravel 模型 - 我只想模拟它返回的内容,并将硬编码将运行的各种查询以获得不同的模型结果。

在这里结束了漫长的一天,所以大脑有点晕眩。

2014-10-23 更新

所以我在我的 Schedule 模型上创建了一个范围

然后创建了一个新的 App\Helpers\ScheduleQueryHelper 实例化 App\Schedule 作为变量并添加了这个方法:

然后更新我的规格做

回到我的 ScheduleTimesValidator 类

现在 PhpSpec 正在嘲笑其他类。然而,这似乎是一种非常迂回的做事方式。

0 投票
1 回答
1063 浏览

unit-testing - PhpSpec 预期调用准确

我有一个我试图在 PhpSpec 中测试的 Laravel5 应用程序的方法,但它一直抛出以下错误:

该方法传递了一个数组,我想模拟模型的 getChurchTimezone 方法返回一个时区。

方法:

在我的其他规范中,我经常做类似的事情$double->method('someArgument')->willReturn('blah'),但由于某种原因,这种特定情况不起作用,我对为什么感到困惑。

我试过给它一个数组的副本,我试过直接给它一个整数,我试着把 $this->church->getChurchTimezone 拉到它自己的方法中,然后给它一个数组或一个整数,但无论如何PhpSpec 总是以“准确”的方式返回预期的调用错误。

规格:

这是我的应用程序中其他地方的另一个规范示例,它使用相同的方法并通过