【发布时间】:2018-12-22 04:07:21
【问题描述】:
我有一个 Board 模型和一个 Pin 模型,它们是多对多的。我正在测试以确保当创建一个引脚并分配一个板时,它会保存到数据透视表中。由于我是测试新手,所以我无法弄清楚这一点。
这是我的测试:
/** @test */
public function a_pin_can_belong_to_a_board()
{
$board = create('App\Board');
$pin = make('App\Pin');
$response = $this->post('/pins/create', $pin->toArray());
$pin->boards()->sync($board);
$this->assertDatabaseHas('board_pin', [
'board_id' => $board->id,
'pin_id' => $pin->id
]);
}
这是我的错误:
1) Tests\Unit\PinTest::a_pin_can_belong_to_a_board
Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity
constraint violation: 19 NOT NULL constraint failed: board_pin.pin_id
(SQL: insert into "board_pin" ("board_id", "pin_id") values (1, ))
Caused by
PDOException: SQLSTATE[23000]: Integrity constraint violation: 19 NOT
NULL constraint failed: board_pin.pin_id
这是我的控制器:
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required|max:200',
'link' => 'required|max:255'
]);
$pin = new Pin();
$pin->title = $request->title;
$pin->link = $request->link;
$pin->user_id = auth()->id();
$pin->save();
$pin->boards()->sync($request->boards);
return redirect("/pins/{$pin->id}");
}
任何帮助将不胜感激!谢谢!
【问题讨论】:
-
图钉是否被保存?您可以从该 SQL 输出中看出 values 数组只有一个用于 board_id。值 (1, )) 部分。
-
我对测试有点陌生,我该怎么说?当它被发布到该路线时,它不会被保存吗?
标签: php laravel testing eloquent phpunit