这个问题是我似乎正在产生的一个问题,因为我慢慢地通过学习测试。
我有一个书籍模型和一个票证审计模型。他们有一对一的关系。创建图书时,函数还应创建一系列票证(用于审计)。
我希望我的测试确保正在创建ticketAudit模型,并且使用laravel中的雄辩ORM进行关联。
到目前为止我的班级:
Class TicketCreator implements TicketCreatorInterface {
protected $ticket;
public function __construct(TicketAudit $ticketAudit)
{
//dd($ticketAudit);
$this->ticket = $ticketAudit;
}
public function createTicket($input, $book) {
$counter = $input['start'];
while($counter <= $input['end']) {
$ticketDetails = array(
'ticketnumber'=>$counter,
'status'=>'unused',
'active'=>1
);
$this->ticket->create($ticketDetails)->save();
$this->ticket->book()->associate($book)->save();
$counter = $counter+1;
}
return $counter;
}
}
我尝试测试:
public function testCreateCreatesTickets() {
//arrange
$book = FactoryMuff::create('Book');
$aTicket = FactoryMuff::create('TicketAudit');
$ticketAudit = new TicketAudit;
$ticketCreator = new TicketCreator($ticketAudit);
//act
$response = $ticketCreator->createTicket(array('start'=>1000, 'end'=>1001), $book);
// Assert...
$this->assertEquals(true, $response);
}
然而,当我运行此测试时,我收到错误:
Integrity constraint violation: 19 ticket_audits.ticketnumber may not be NULL
由于某种原因,我没有使用传递给它的值创建模型。我已经检查了该对象存在的函数以及在数组中正确创建的值,但它不起作用。
这是测试的独特之处吗?
我在内存数据库中为此测试创建了一个sqlite。
任何帮助表示赞赏
Crikey这个开始测试的决定有点像噩梦
答案 0 :(得分:0)
感谢Manuel要求发布TicketAudit课程,我注意到我的模型扩展了Eloquent。我最近添加了Ardent并且应该扩展了Ardent,因此错误存在于模型中!
修订后的修正模型:
use LaravelBook\Ardent\Ardent;
class TicketAudit extends Ardent {
protected $guarded = array();
public $autoHydrateEntityFromInput = true;
public $autoPurgeRedundantAttributes = true;
public static $rules = array(
'status' => 'required',
'ticketnumber' => 'required'
);
public static $factory = array(
'ticketnumber' => '1000',
'status' => 'unused',
);
public function book() {
return $this->belongsTo('Book');
}
}
感谢您的路标