Nasıl bir birim Zend Framework ve bir veritabanı için bir satır eklenmesini test edin

2 Cevap php

Bir satırın / güncelleme ekleyerek test etmek için, ben, bir yazı simüle etmek için bu yönlendirmeleri kontrol etmek ve yeni eklenen / güncellenen metin sayfada olduğunu kontrol etmek için bir test yazdım. Kod çalışır, ancak test değil - bu yanlış neden bana söyleyebilir?

public function testEditProduct() {
    $request = $this->getRequest();
    $request->setMethod('POST');
    $request->setPost(array(
    	'id'=>'1',
    	'title'=>'Test Product 1a'
    ));
    $this->dispatch('/product/edit/id/1');
    $this->assertRedirectTo('/');
    $this->assertQueryContentContains('a', 'Test Product 1a');
}
public function testAddProduct() {
    $request = $this->getRequest();
    $request->setMethod('POST');
    $request->setPost(array(
    	'title'=>'Test Product 3'
    ));
    $this->dispatch('/product/add/');
    $this->assertRedirectTo('/');
    $this->assertQueryContentContains('a', 'Test Product 3');
}

Aşağıdaki testler hem iş, bir ID parametresi ile indeks sayfası uygun metin içerdiğini iddia ve bu ürünün başlık artık sayfada görüntülenen bir ürün sildikten sonra.

public function testIndexPageListsProducts() {
    $this->dispatch('/product/index/id/1');
    $this->assertQueryContentContains('h1', 'Test Product 1');
}

public function testDeleteProduct() {
    $request = $this->getRequest();
    $request->setMethod('POST');
    $this->dispatch('/product/delete/id/2');
    $this->assertRedirectTo('/');
    $this->assertNotQueryContentContains('a', 'Test Product 2');
}

2 Cevap

İlk testi, değişim

$this->assertRedirectTo('/');
$this->assertQueryContentContains('a', 'Test Product 3');

karşı

$this->assertRedirectTo('/');

$this->resetRequest();
$this->resetResponse();

$this->disptach('/');
$this->assertQueryContentContains('a', 'Test Product 3');

Yanılmıyorsam eğer, birim test framework yönlendirmeleri yürütmek değil. Bu yönlendirmeleri istendi hangi izler, ama aslında bunları yapmaz.

Yani kod, size düzenleme görünümü / eylem 'Test Ürün 3' varlığı için kontrol ediyoruz, ve bu test elbette başarısız olur. Önce indeksi istemek ve daha sonra test yapmak gerekir.

Yardımlarınız için teşekkürler. I $this->resetRequest(); ve $this->resetResponse(); hataları attı bulundu, ama ben method summary for Zend_Test_PHPUnit_ControllerTestCase kontrol ve $this->reset(); bağlantılı sayfası söz yöntemleri listesi yok bulundu , ama onlar farklı listelenir ediyoruz.

$this-reset(); yalnız da Yok (varsayılan modül bu uygulama için tanımlanmış) bir hata attı, ama ben aradım eğer $this->bootstrap(); sonra testler geçildi bulundu. Bu, geçerli bir çözüm var mı? Netleştirmek için, benim test kodu artık:

public function testEditProduct() {
	$request = $this->getRequest();
	$request->setMethod('POST');
	$request->setPost(array(
		'id'=>'1',
		'title'=>'Test Product 1a'
	));
	$this->dispatch('/product/edit/id/1');
	$this->assertRedirectTo('/');

	$this->reset();
	$this->bootstrap();
	$this->dispatch('/');
	$this->assertQueryContentContains('a', 'Test Product 1a');
}
public function testAddProduct() {
	$request = $this->getRequest();
	$request->setMethod('POST');
	$request->setPost(array(
		'title'=>'Test Product 3'
	));
		$this->dispatch('/product/add/');
	$this->assertRedirectTo('/');

	$this->reset();
	$this->bootstrap();
	$this->dispatch('/');
	$this->assertQueryContentContains('a', 'Test Product 3');
}