我是一个新手开发人员,试图为现有的laravel应用程序启动测试套件,但我没有测试经验。现在,我只是在尝试构建一些测试,以期获得一些信心和经验,以编写更多实质性的测试。我正在尝试测试模型上的关系(我意识到这不是很明智的测试),并试图创建一个模拟的模型对象来这样做(我也知道最好在sqlite db的内存中进行此操作,但主要是目标是测试 Controller ,但我不知道该如何处理身份验证问题)。我有以下简单,愚蠢的测试:

public function testFoo()
{
    $lead = m::mock('Lead');

    $this->mock->shouldReceive('program')->once();

    $this->assertEquals($lead->program_id, $lead->program->id);
}

但我收到以下错误:
LeadTest::testFoo
BadMethodCallException: Received Mockery_0_Lead::getAttribute(), but no expectations were specified

我不明白此错误试图告诉我什么,我对搜索问题或阅读可以找到的文档没有任何帮助。

我假设我没有设置期望的返回值,但这是一个相当普通的测试,并且似乎不适合对期望的返回值进行硬编码。我在这里想念什么?

我只是在测试Laravel关系,以确保我正确设置/实现了以下各项:
public function program()
{
    return $this->belongsTo('Program');
}

最佳答案

问题是我缺少预期的返回值。应该是这样的:

$this->mock->shouldReceive('program')->once()->andReturn(someObjectOrValue);

断言应该是这样的:
$this->assertEquals(someObjectOrValue, $lead->program->id);

Mockery文档比我最初想象的要冗长得多。 http://docs.mockery.io/en/latest/reference/expectations.html

10-04 10:40