如何让 phpspec 评估我的构造函数

How to make phpspec evaluate my constructor

public function __construct(RequestSchemaInterface $requestSchema)
{
    $this->schema = $requestSchema->getSchema();
}

当我 运行 构建器的 phpspec 时,$this->schema 总是空的。 在正常调用中,它设置架构。 我得到实施

function let(RequestSchema $requestSchema)
{
    $this->beConstructedWith($requestSchema);
}

如果 class 使用 $this->schema,我该如何测试它们?

您的 let() 方法使用存根来构建被测 object。虽然这是推荐的,但不是必需的。您可以创建一个 RequestSchema 类型的真实 object 并使用它来构建测试 class:

function let()
{
    $requestSchema = new RequestSchema();
    $this->beConstructedWith($requestSchema);
}

更新:

关于你的问题的标题"How to make phpspec evaluate my constructor":构造函数被执行但是,因为你为$requestSchema使用了存根,调用$requestSchema->getSchema() 在构造函数中 returns NULL.

当它的方法 getSchema() 被调用时,你可以 prepare the stub 到 return 其他东西。

试试这个:

function let(RequestSchema $requestSchema)
{
    // Prepare the stub
    $requestSchema->getSchema()->willReturn('something');

    // Construct the object under test using the prepare stub
    $this->beConstructedWith($requestSchema);

    // Verify the constructor initialized the object properties
    $this->schema->shouldBe('something');
}