Я работаю над Laravel 5.7
, и я хотел бы задать вам вопрос относительно тестирования PHPUnit.
У меня есть тестовый класс, скажем, ProductControllerTest.php
, с двумя методами testProductSoftDelete()
иtestProductPermanentlyDelete()
.Я хочу использовать аннотацию @depends
в testProductPermanentlyDelete () для того, чтобы сначала мягко удалить продукт, а затем получить идентификатор продукта и перейти к тесту на постоянное удаление.Проблема в том, что черта DatabaseTransaction
запускает транзакции при каждом выполнении теста (метода).Мне нужно начать транзакцию перед всеми тестами моего класса ProductControllerTest, а затем откатить транзакцию в конце всех тестов.Есть ли у вас какие-либо идеи?Из того, что я искал в Интернете, ничего не работало должным образом.
public function testProductSoftDelete()
{
some code
return $product_id;
}
/**
* @depends testProductSoftDelete
*/
public function testProductPermanentlyDelete($product_id)
{
code to test permanently deletion of the product with id $product_id.
There is a business logic behind that needs to soft delete first a
product before you permanently delete it.
}
Имеет ли смысл следующее:
namespace Tests\App\Controllers\Product;
use Tests\DatabaseTestCase;
use Tests\TestRequestsTrait;
/**
* @group Coverage
* @group App.Controllers
* @group App.Controllers.Product
*
* Class ProductControllerTest
*
* @package Tests\App\Controllers\Product
*/
class ProductControllerTest extends DatabaseTestCase
{
use TestRequestsTrait;
public function testSoftDelete()
{
$response = $this->doProductSoftDelete('9171448');
$response
->assertStatus(200)
->assertSeeText('Product sof-deleted successfully');
}
public function testUnlink()
{
$this->doProductSoftDelete('9171448');
$response = $this->actingAsSuperAdmin()->delete('/pages/admin/management/product/unlink/9171448');
$response
->assertStatus(200)
->assertSeeText('Product unlinked successfully');
}
}
namespace Tests;
trait TestRequestsTrait
{
/**
* Returns the response
*
* @param $product_id
* @return \Illuminate\Foundation\Testing\TestResponse
*/
protected function doProductSoftDelete($product_id)
{
$response = $this->actingAsSuperAdmin()->delete('/pages/admin/management/product/soft-delete/'.$product_id);
return $response;
}
}
namespace Tests;
use Illuminate\Foundation\Testing\DatabaseTransactions;
abstract class DatabaseTestCase extends TestCase
{
use CreatesApplication;
use DatabaseTransactions;
}