【问题标题】:Behavior-Driven-Development is failing my expectations with PHPSpec行为驱动的开发没有达到我对 PHPSpec 的期望
【发布时间】:2016-10-13 13:16:19
【问题描述】:

我通过 PHPSpec 生成了以下类:

class Consumer
{
   public function __construct($accesskey, $accessToken)
   {
      // TODO: write logic here
   }
}

当我测试构造函数时,我得到一个错误,它缺少参数 1。下面是我编写行为的方式:

namespace spec\Zizy\Aggregator\Context;

use Zizy\Aggregator\Context\Contract\ContextContractInterface;
use Zizy\Aggregator\Context\Consumer;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

 class ConsumerSpec extends ObjectBehavior
 {
    function it_is_initializable()
    {
      $this->beConstructedWith( md5('samplekey'), md5('sampletoken') );
      $this->shouldHaveType(Consumer::class);
    }

    /**
    *  This spec describes how we would access our consumer directry
    */
    public function it_gets_access_token()
    {
       $this->getAccessToken()->shouldReturn(md5('sampletoken'));
    }
 }

以下是我在运行 PHPSpec 时遇到的错误。

Zizy\Aggregator\Context\Consumer 21  - it gets access token
  warning: Missing argument 1 for Zizy\Aggregator\Context\Consumer::__construct() in C:\wamp64\www\spikes\src\Context\Consumer.php line 7

我也尝试通过接口测试我的消费者,但 PHPSpec 一直告诉我它找不到接口,但在类上下文中因此为我提供了创建类的机会,同时它实际上应该是一个接口。

如何通过 PHPSpec 的接口编写代码?

【问题讨论】:

  • 我知道这一点,但提供这样的背景是合适的,这样任何来救我的人都能真正了解我的来源,因为对我来说,问题不仅仅是 PHPSpec,而是还有我第一次使用这个库的事实,也许需要修复的是我的思维过程而不是我的代码实现。我希望这对你来说是一个令人满意的理由。
  • 公平。我将尝试编辑我的问题,使其不包含不必要的信息。谢谢
  • 不确定,但过去我在规范类名称方面遇到过问题,请尝试将 ConsumerBehavior 重命名为 ConsumerSpec
  • 嗨 @gfv 即使将 eclass 名称更改为 ConsumerSpec 我仍然遇到同样的问题。我将花更多时间研究这个工具,因为我对它如何从头开始处理开发感兴趣。感谢您的宝贵时间。
  • 如果您粘贴您想要指定的完整课程代码,我可能会进一步帮助您。

标签: php phpspec


【解决方案1】:

您需要为每个示例案例指定构造函数参数。如果你觉得有点费力,你可以使用let在每个例子运行前做准备。对于您的情况,这样的事情应该可以工作:

namespace spec\Zizy\Aggregator\Context;

use Zizy\Aggregator\Context\Contract\ContextContractInterface;
use Zizy\Aggregator\Context\Consumer;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

class ConsumerSpec extends ObjectBehavior
{
    function let()
    {
        $this->beConstructedWith( md5('samplekey'), md5('sampletoken') );
    }

    function it_is_initializable()
    {
        $this->shouldHaveType(Consumer::class);
    }

    /**
    *  This spec describes how we would access our consumer directry
    */
    public function it_gets_access_token()
    {
        $this->getAccessToken()->shouldReturn(md5('sampletoken'));
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多