Laravel功能测试外键

时间:2018-09-25 01:11:49

标签: laravel unit-testing phpunit

我正在为我正在开发的Laravel软件包进行一些测试,并且我认为当前存在的问题涉及模型的外键之一。在测试中,我试图确认(1)我可以成功创建Task模型的实例,(2)重定向到指定的路由,并且(3)确认指定的会话变量存在。

下面是我的测试方法:

public function it_can_create_task()
{
    $data = [
        'command'   => $this->faker->text(15),
        'cron'      => factory(\Smeechos\TaskScheduler\Models\Cron::class)->create()->id
    ];

    $this->post('task-scheduler/tasks/add', $data)
            ->assertStatus(302)
            ->assertRedirect(route('tasks'))
            ->assertSessionHas('stsp-status', 'success')
            ->assertSessionHas('stsp-message', 'Task Successfully Added!');
}

我认为这与外键有关的原因是:

  1. 当我使用数据库中已经存在的 cron 参数的值时,它就会通过。
  2. 当我为数据库中未使用的 cron 参数使用值时,要么通过将其设置为非常大的值,要么使用如上所述的工厂,则失败。

运行测试时出现的错误是:无法断言两个字符串相等。这是来自 assertRedirect(route('tasks'))的错误。断言,因为代码没有重定向到期望的位置(理论上由于外键约束)。我相信当测试尝试发布数据以创建我的Task模型的实例时,它会失败,因为cron参数中的值在数据库中不存在。

有人有过类似问题的经验,或者成功创建了涉及外键的测试吗?我错过了一些琐碎的事情吗?

谢谢!

0 个答案:

没有答案