2016-11-18 31 views
1

有没有办法让一个setUp()和tearDown()方法告诉laravel“在数据库中创建所有这些插入内容,但是当您完成所有测试时,删除不重置数据库”Laravel 5使用phpUnit进行测试而不重置我的数据库

所有插入我需要做的测试是这样的:

/** @test */ 
public function testRegistration(){ 

    $account = [ 
    'name'  => 'test', 
    'email' => '[email protected]', 
    'password' => '123451234' 
    ]; 

    $this->visit('/register') 
     ->type($account['name'],'name') 
     ->type($account['email'],'email') 
     ->type($account['password'],'password') 
     ->type($account['password'],'password_confirmation') 
     ->press('Register') 
     ->seePageIs('/home'); 
} 

起初,我可以运行phpunit,它会工作,如果我再次运行,当然它返回一个错误说服力我不能使用此电子邮件,因为已经在数据库中。

的问题是,我不能简单的复位我的数据库,我有插在我的数据库中已有12.000行,我,因为我需要插入到我的应用程序是有意义的这些12.000行不能创建test_database

我还没有找到任何可以使用的信息,我可以找到的所有信息都是“让您的测试调用迁移::刷新并发送4分钟来再次填充您的表”,但我确信这是可能的找到更好的解决方案!

另外,我在哪里把我的setUp()方法,我在哪里调用它?

谢谢。

回答

1

请参阅this和此documentation(使用交易)。

此特征将仅包含事务中的默认数据库连接。

换句话说,插入将被“伪造”,因此您无需每次都将其删除。

另一种选择是添加另一个测试,在该测试中删除所做的每个插入。

User::where('name', 'test')->where('email','[email protected]')->delete(); 
+0

谢谢,正是我需要的! –

相关问题