Я новичок в TDD, поэтому извините меня, если это вопрос о нобе.Тестовые отношения в Laravel 4 с FactoryMuff
У меня есть пользователи и проекты, связанные с 2 различными способами:
- проект, принадлежит пользователю
- Многие пользователи могут быть уполномочены многих проектов.
Я следую этому руководству http://net.tutsplus.com/tutorials/php/testing-like-a-boss-in-laravel-models/?search_index=16, поэтому я использую FactoryMuff.
Это мой класс проекта:
<?php
use LaravelBook\Ardent\Ardent;
class Project extends Ardent
{
/**
* Ardent validation rules
*/
public static $rules = array(
'name' => 'required', // Project Title
'user_id' => 'required|numeric', // User owner id
);
/**
* Array used by FactoryMuff to create Test objects
*/
public static $factory = array(
'name' => 'string',
'user_id' => 'factory|User', // Will be the id of an existent User.
);
/**
* Belongs to user
*/
public function owner()
{
return $this->belongsTo('User', 'user_id');
}
/**
* Many Users can be authorized
*/
public function authorized()
{
return $this->belongsToMany('User', 'project_user', 'project_id', 'user_id')->withTimestamps();
}
}
И это мой класс User:
<?php
use Zizaco\Entrust\HasRole;
use Zizaco\Confide\ConfideUser;
class User extends ConfideUser {
/**
* Ardent validation rules
*/
public static $rules = array(
'username' => 'required|min:4|unique:users',
'email' => 'required|email|unique:users',
'password' => 'required|between:4,16|confirmed',
'password_confirmation' => 'required|between:4,16',
);
/**
* Array used by FactoryMuff to create Test objects
*/
public static $factory = array(
'username' => 'string',
'email' => 'email',
'password' => '12345',
'password_confirmation' => '12345',
);
(more code)
/**
* Many Users can be authorized on many Projects
*/
public function authorized()
{
return $this->belongsToMany('Project', 'project_user', 'user_id', 'project_id')->withTimestamps();
}
/**
* Users can have many Projects
*/
public function projects()
{
return $this->hasMany('Project');
}
}
И это мой ProjectTest:
<?php
use Zizaco\FactoryMuff\Facade\FactoryMuff;
use Way\Tests\Factory;
class ProjectTest extends TestCase
{
use Way\Tests\ModelHelpers;
/**
* Test relationship with User
*/
public function testRelationshipWithUser()
{
// Instantiate new Project
$project = FactoryMuff::create('Project');
$this->assertEquals($project->user_id, $project->owner->id);
}
/**
* Test relationship with Authorized Users
*/
public function testRelationshipWithAuthorizedUsers()
{
// Instantiate new Project
$project = FactoryMuff::create('Project');
$project->save();
$project->authorized()->attach($project->user_id);
$this->assertEquals($project->user_id, $project->authorized->first()->id);
}
}
Если я запускаю тесты по отдельности (комментируя другой), оба проходят. Однако, если я бег и я получаю эту ошибку:
Caused by
PDOException: SQLSTATE[HY000]: General error: 1 table users has no column named password_confirmation
Почему жалуется этим столбцом во втором тесте, а не в первую очередь? : S
Это не так много! Многим для многих требуется сводная таблица, например. project_user – Adamski