我是一名新手开发人员,试图为现有的laravel应用程序启动测试套件,但我没有测试经验。现在我只是试图进行一些测试,以获得一些信心和经验来编写更多实质性测试。我试图在一个模型上测试一个关系(我意识到它不是一个非常明智的测试),并试图创建一个模拟的模型对象(我也理解它做得更好)这在sqlite数据库的内存中,但这里的主要目标是测试控制器,但我不知道如何处理那里的身份验证问题)。我有以下简单,愚蠢的测试:
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');
}
答案 0 :(得分:4)
问题在于我错过了预期的返回值。应该是这样的:
$this->mock->shouldReceive('program')->once()->andReturn(someObjectOrValue);
断言应该是这样的:
$this->assertEquals(someObjectOrValue, $lead->program->id);
Mockery文档比我原先想象的要冗长得多。 http://docs.mockery.io/en/latest/reference/expectations.html