Começando step-by-step criar a um método na classe de teste StudentTest
para validar um lado do relacionamento. Os outros métodos da classe foram omitidos e podem ser consultados no repositório do projeto.
<?php
include_once dirname(__FILE__) . '/../support/enviromment.php';
/**
* @group models
*/
class StudentTest extends CIUnit_TestCase
{
// .....
public function testShouldHaveManyEnrollments()
{
$student = Student::find(1);
$this->assertEquals(2, count($student->enrollments));
}
// ....
Rodar os testes e ver o teste quebrar.
$ phpunit --testdox --color models/StudentTest.php
Um estudante pode ter muitas matrículas durante sua vida acadêmica, uma para cada semestre. Para isso devemos especificar este relacionamento nos modelos envolvidos.
<?php
class Student extends Person {
static $primary_key = 'id';
static $has_many = array(array('enrollments'));
public function __construct(array $attributes = array()) {
parent::__construct(array_merge($attributes,array('type'=> __CLASS__ )));
}
}
<?php
class Enrollment extends ActiveRecord\Model {
static $belongs_to = array(
array('student')
);
}
Nosso teste ainda continuará falhando, agora precisamos fazer nosso método find() do ORM retornar dados para que o método de teste funcione. Para isso temos duas estratégias que podemos utilizar nesse momento, criar um mock do método ou utilizar fixtures para popular a base de teste. Vamos abordar as duas alternativas iniciando com as fixtures.
Inicie criando um arquivo que conterá os dados das pessoas em /tests/fixtures/people_fixt.yml.
1:
name: 'Paola de Oliveira'
type: 'Student'
2:
name: 'Gabriela Duarte'
type: 'Student'
3:
name: 'Márcia Lima'
type: 'Teacher'
4:
name: 'Fernanda Montenegro'
type: 'Teacher'
5:
name: 'Virgin Stanford'
type: NULL
E outro em /tests/fixtures/enrollment_fixt.yml que vai descrever os dados das matrículas.1:
student_id: 1
year: 2010
2:
student_id: 1
year: 2011
3:
student_id: 2
year: 2011
Pronto, já temos nossas fixtures criadas agora é só instanciálas nos arquivos de test<?php
include_once dirname(__FILE__) . '/../support/enviromment.php';
/**
* @group models
*/
class StudentTest extends CIUnit_TestCase
{
# load fixtures
protected $tables = array(
'enrollments' => 'enrollments',
'people' => 'people'
);
//...
Agora ao rodar os testes eles devem passar
$ phpunit --testdox --color models/StudentTest.php
------------------
Student
[x] Should be subclass of person
[x] Should be an instance of student
[x] Should have many enrollments
Referências:
http://giorgiosironi.blogspot.com/2009/12/practical-php-testing-is-here.html
Nenhum comentário:
Postar um comentário