ciaranmcnulty/phpspec-typehintedmethods

为 phpspec 扩展,以增强生成的函数

4.0.0 2018-07-15 09:56 UTC

This package is auto-updated.

Last update: 2024-08-24 03:53:51 UTC


README

Build Status

#PhpSpec 类型提示方法扩展

##用法

phpspec 默认会生成不存在的函数,但不会添加类型提示。此扩展允许这种行为。

编写一个使用不存在函数的 phpspec 示例

function it_does_foo()
{
    $this->foo(new \ArrayObject());
}

并运行规格说明。在接受提示后,以下内容将出现在您的类中

public function foo(\ArrayObject $arrayObject)
{
    // TODO: write logic here
}

##安装

将此扩展作为 composer 依赖项添加

composer require --dev ciaranmcnulty/phpspec-typehintedmethods

将以下内容添加到您的 phpspec.yml 中

extensions:
  Cjm\PhpSpec\Extension\TypeHintedMethodsExtension: ~

##谁应该使用这个扩展?

此扩展有其优缺点。它是为了满足我(Ciaran)的一个特定需求而编写的,因为我倾向于编写这样的示例

function it_does_something_with_a_token(TokenInterface $token)
{
    $token->getId()->willReturn(1234);

    $this->foo($token)->shouldReturn(1234);
}

在这种情况下,因为我已经编写了关于 foo 需要接收哪些类型的示例,所以对我来说,获得类型提示的函数是高效的。

然而,有些人更倾向于用“示例”的心态编写规范,因此可能会编写如下内容

function it_does_something_with_a_token(ArrayToken $token)
{
    $token->getId()->willReturn(1234);

    $this->foo($token)->shouldReturn(1234);
}

在这种情况下,作者使用 ArrayToken 来说明示例,但更希望类型提示是 TokenInterface。对于此作者来说,类型提示可能会令人烦恼,因为他们将不得不不断编辑类型提示。

这就是为什么这个功能不在核心中的原因 - 我们不想鼓励作者针对实现进行类型提示(在 phpspec/phpspec#230 上的讨论)

##待办事项

未来想法

  1. 分析/生成目标文件中的 use 语句,以便更短的类型提示

  2. 对示例进行元分析,以确定可以使用哪些父类(在类型提示中?)