ciaranmcnulty / phpspec-typehintedmethods
为 phpspec 扩展,以增强生成的函数
4.0.0
2018-07-15 09:56 UTC
Requires
- php: ^7.1
- phpspec/phpspec: ^5.0
- phpspec/prophecy: ^1.6
Requires (Dev)
- behat/behat: ~3.0
- symfony/filesystem: ~3.0
README
#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 上的讨论)
##待办事项
未来想法
-
分析/生成目标文件中的
use
语句,以便更短的类型提示 -
对示例进行元分析,以确定可以使用哪些父类(在类型提示中?)