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

When I run phpspec for Builder then $this->schema is always null. In normal call it sets schema. I got let implemented

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

How can I test methods of that class if they use $this->schema ?

nomysz
  • 187
  • 1
  • 9

1 Answers1

1

Your let() method uses a stub to construct the object under test. While this is recommended, it is not required. You can create a real object of type RequestSchema and use it to construct the tested class:

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

Update:

Regarding the title of your question "How to make phpspec evaluate my constructor": the constructor is executed but, because you use a stub for $requestSchema, the call $requestSchema->getSchema() inside the constructor returns NULL.

You can prepare the stub to return something else when its method getSchema() is called.

Try this:

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');
}
axiac
  • 68,258
  • 9
  • 99
  • 134