标签: phpspec

第一次测试Laravel 4应用程序(PHPSpec/BDD与PHPUnit/TDD)

我一直在和这个问题搏斗太久了.我知道我需要跳到一个或另一个,因为它们显然都是可行的/有用的工具,但是已经被困在了几个星期的两个方面.

PHPUnitPHPSpec - 哪一个可以带来更好的长期可维护性和编程实践?

我已经和几个经验丰富的PHPUnit谈过 - > PHPspec转换/用户现在发誓PHPspec,声称它通过BDD方法促进了更好的设计.但是,由于它是一个更新的工具,与PHPUnit相比缺乏社区/教程.

目前,我的PHP开发主要围绕Laravel 4开发.

在PHPUnit基本上融入Laravel框架的地方,看起来这可能是更容易的选择,但我真的很喜欢PHPSpec的BDD方面.然而,似乎PHPSpec不希望与Laravel的外观设置很好地配合(我也发现这可能是一个很好的做法,以便尽可能避开).

我真正的难题是哪一个更有可能成功地集成到现有的Laravel 4项目中,而现有的测试覆盖率为零.

我有一个早期/简短的尝试将PHPUnit和PHPSpec集成到现有项目中,但实际上只是不确定从哪里开始编写初始测试并最终废弃它们暂时.

我真的想弄清楚从长远来看哪一个可能更值得投入一些时间.

任何经历过两者的人的任何资源/见解都将受到高度赞赏.

tdd bdd phpunit phpspec laravel-4

15
推荐指数
1
解决办法
3866
查看次数

PHPSpec和覆盖率报告

有没有人知道从PHPSpec测试生成覆盖率报告的方法?

我想过xdebug,但据我所知它无法为jenkins生成报告.

php continuous-integration code-coverage phpspec jenkins

14
推荐指数
3
解决办法
3748
查看次数

如何使用phpspec获取代码自动完成功能

我刚刚开始学习phpspec以取代PHPUnit.不幸的是,我更喜欢使用PHPStorm编辑器的代码完成功能,这使得即使是PHPUnit的详细模拟界面也可以非常快速地输入.

phpspec没有这样的运气.鉴于这样的类:

<?php

namespace spec\MyVendor\MyClass;

use PhpSpec\ObjectBehavior;

class MyClassSpec extends ObjectBehavior
{
    function it_is_initializable()
    {
        $this->shouldHaveType('MyVendor\MyClass');
    }

    function it_should_do_something()
    {
        $this->???
    }
}
Run Code Online (Sandbox Code Playgroud)

首先,shouldHaveType显示'找不到方法'突出显示,其次,如果我尝试自动完成???,我的选项仅限于少数方法ObjectBehaviour.我希望看到的东西一样shouldHaveType,shouldImplement和许多.

我在Github上找到了这个phpspec-stubs存储库,但它似乎只定义了一个方法,并且需要扩展一个包装类.

还有一个PHPStorm插件,但我不清楚这是否应该提供自动完成,并且当前版本在输入任何PHP文件时立即在PHPStorm中给我一个NullPointerException.

那么,你们所有的phpspec用户都打字很多,还是有另一种解决方案?

php phpspec phpstorm

14
推荐指数
1
解决办法
2074
查看次数

PHPUnit和PHPSpec之间的异同

我目前正在研究我应该用于php的测试框架.我有两个选择是PHPUnit和PHPSpec.我知道PHPUnit是TDD(测试驱动开发),PHPSpec是BDD(行为驱动开发).然而,由于PHPSpec网站缺乏任何真正的PHPSpec教程和有限的文档,我无法得出完整的结论.我向大家提出的问题是,这两个框架之间有哪些相似点和不同之处?是的,BDD和TDD是大的,但还有其他吗?它们看似相似,但没有人详细谈论它们的相似之处.谢谢.

php phpunit unit-testing phpspec

10
推荐指数
1
解决办法
3863
查看次数

汇总来自不同测试框架的代码覆盖率

在现代编程工作流程中,一次使用了许多测试框架.例如,在PHP世界中,它实际上是一次使用单元测试,集成测试和功能/验收测试的标准方法.大多数情况下,不同的框架用于不同的测试类型.我使用PHPSpec组合单元,PHPunit用于集成,CodeCeption用于功能测试.

是否有可能聚合每个框架返回的代码覆盖率结果?是否有任何工具可以聚合来自不同框架的代码覆盖率报告? 或者,只有在每个框架不正确时才能查看每个框架的单个结果,因为每个代码覆盖率报告都没有考虑其他测试.

testing phpunit code-coverage phpspec codeception

10
推荐指数
1
解决办法
952
查看次数

PhpSpec:如何从套件中仅运行一个测试?

我有一个像下面这样的phpspec类,我只想从中运行一个规范.我想只运行"it_should_do_something_easy".这可能吗?

这是我运行此spec文件的方式:

$> phpspec run spec/Project/WorkerSpec.php
Run Code Online (Sandbox Code Playgroud)

但现在我只想运行一个像"it_should_do_something_easy"这样的规范.

<?php
namespace spec\Project;

use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

class WorkerSpec
{
    public function it_should_do_something_easy()
    {
        $this->doSomethingEasy()->shouldReturn('Done!');
    }

    public function it_should_do_something_hard()
    { 
        $this->doSomethingHard()->shouldReturn('Too hard!');
    }
}
Run Code Online (Sandbox Code Playgroud)

php phpspec

8
推荐指数
1
解决办法
1580
查看次数

PHP7中的PHPSpec捕获TypeError

我想在PHP7中测试标量类型提示和严格类型的示例方法.当我没有传递参数时,该方法应该抛出一个TypeError.PHPSpec返回致命错误:

未捕获的TypeError:参数1传递给Example :: test

<?php

class Example
{
    public function test(string $name)
    {
        $this->name = $name;
    }
}


class ExampleSpec extends ObjectBehavior
{
    function it_is_initializable()
    {
        $this->shouldHaveType('Test\Example');
    }

    function it_check_test_method_when_not_pass_argument()
    {
        $this->shouldThrow('\TypeError')->during('test');
    }
}
Run Code Online (Sandbox Code Playgroud)

一开始我宣布: declare(strict_types=1);

怎么了?我如何测试投掷TypeError

php tdd phpspec php-7

8
推荐指数
2
解决办法
1668
查看次数

pl中的phpspec标量值

我试图使用带有标量值的let函数.我的问题是价格是双倍的,我预计是5.

function let(Buyable $buyable, $price, $discount)
{
    $buyable->getPrice()->willReturn($price);
    $this->beConstructedWith($buyable, $discount);
}

function it_returns_the_same_price_if_discount_is_zero($price = 5, $discount = 0) {
    $this->getDiscountPrice()->shouldReturn(5);
}
Run Code Online (Sandbox Code Playgroud)

错误:

? it returns the same price if discount is zero
expected [integer:5], but got [obj:Double\stdClass\P14]
Run Code Online (Sandbox Code Playgroud)

有没有办法使用let函数注入5?

php unit-testing phpspec

4
推荐指数
1
解决办法
795
查看次数

phpspec和laravel设置

我正在建立一个新的Laravel项目并整合PHPSpec.我无法找到一个与Laravel整齐合作的phpspec.yml文件的良好工作示例.与Rails中的RSpec类似.

我想要的文件夹结构如下

spec/
    models/
    controllers/
app/
    models/
    controllers/
Run Code Online (Sandbox Code Playgroud)

我的phpspec.yml目前看起来像这样:

suites:
controller_suite:
    namespace: Controller
    spec_path: 'spec/controllers'
    src_path: 'app/controllers'

model_suite:
    namespace: Model
    spec_path: 'spec/models'
    src_path: 'app/models'  
Run Code Online (Sandbox Code Playgroud)

我在spec/models文件夹中复制了我的模型相关测试,但是当我'phpspec运行'它没有运行它们中的任何一个.我也意识到命名空间不是Laravel中的'Model'和'Controller',也许更像是Eloquent和BaseController.

我也使用这个扩展名:https://github.com/BenConstable/phpspec-laravel

我不知道如何设置它,找不到任何有用的例子.提前致谢!

编辑:来自Jeffrey Way的另一个论坛上的建议:

您可以使用Behat测试您的控制器.PHPSpec不能代替它(或Codeception).

更新:

我已经决定使用Codeception,因为它似乎整齐地集成到Laravel并广泛使用.

phpspec laravel

4
推荐指数
1
解决办法
2820
查看次数

phpspec - 获取返回值

我想得到对象的实际返回值而不是可链接对象.

class Foo
{
   public $attribute = 'data';
}

class FooSpec extends ObjectBehavior
{
   public function it_is_a_test()
   {
       $attribute = $this->attribute; // I want to get 'data'
   }
}
Run Code Online (Sandbox Code Playgroud)

这有什么办法吗?

谢谢.

php phpspec

4
推荐指数
1
解决办法
708
查看次数