Php 如何在Laravel 4软件包上进行单元和数据库测试?
我正在为Laravel 4.2开发一个包。我想写单元测试和数据库测试。据我所知,为了使用测试中的所有功能,我必须创建一个Laravel应用程序实例 我对Php 如何在Laravel 4软件包上进行单元和数据库测试?,php,unit-testing,laravel-4,package,database-testing,Php,Unit Testing,Laravel 4,Package,Database Testing,我正在为Laravel 4.2开发一个包。我想写单元测试和数据库测试。据我所知,为了使用测试中的所有功能,我必须创建一个Laravel应用程序实例 我对composer.json进行了修改,并添加了如下Laravel包 "require-dev": { "phpunit/phpunit" : "4.*", "laravel/laravel": "4.2.*" }, 在composer更新之后我创建了一个类似于Laravel的TestCase类 publ
composer.json
进行了修改,并添加了如下Laravel包
"require-dev": {
"phpunit/phpunit" : "4.*",
"laravel/laravel": "4.2.*"
},
在composer更新之后
我创建了一个类似于Laravel的TestCase类
public function createApplication()
{
$unitTesting = true;
$testEnvironment = 'testing';
return require __DIR__.'/../vendor/laravel/laravel/bootstrap/start.php';
}
问题是,当在start.php中执行require时,我在使用path创建框架时出错
/vjroby/laravel nonce/vendor/laravel/laravel/vendor/laravel/framework/src
因为没有这样的文件,所以该文件位于
/vjroby/laravel nonce/vendor/laravel/framework/src
需要基本路径(“vendor/laravel/laravel/bootstrap/start.php”);
查看Laracasts视频。您将看到使用Codeception、Behat和PHPUnit进行单元测试。您将了解使用哪些库以及使用这些工具开发的工作流程和过程
我成功地将数据库测试与内存中的sqlite集成在一起。 我正在发布答案,所以将来可能会有人需要它
bootstrap=“tests/bootstrap/autoload.php”
Artisan::call()
,但没有成功
<?php
use Mockery as m;
class NonceTest extends Illuminate\Foundation\Testing\TestCase{
public function tearDown()
{
m::close();
}
public function testWithDatabase(){
$nonce = new \Vjroby\LaravelNonce\Nonce();
$nonceId = uniqid();
$nonce->setNonce($nonceId, '');
$nonce = DB::table('nonce')->where('id', $nonceId)->get();
$this->assertTrue(count($nonce) == 1);
$this->assertEquals($nonceId, $nonce[0]->id);
}
/**
* Creates the application.
*
* Needs to be implemented by subclasses.
*
* @return \Symfony\Component\HttpKernel\HttpKernelInterface
*/
public function createApplication()
{
$unitTesting = true;
$testEnvironment = 'testing';
$app = require __DIR__.'/bootstrap/start.php';
$app->register('Vjroby\LaravelNonce\LaravelNonceServiceProvider');
return $app;
}
public function setUp()
{
parent::setUp();
$this->app['config']->set('database.default', 'testing');
$a = __DIR__.'/../src/migrations';
$this->app['config']->set('database.connections.testing', array(
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
));
$this->migrate();
}
public function migrate()
{
Schema::dropIfExists('nonce');
Schema::create('nonce', function(\Illuminate\Database\Schema\Blueprint $table){
$table->string('id',255);
$table->string('data',255)->nullable();
$table->nullableTimestamps();
$table->unique(['id', 'data']);
$table->index(['id', 'data']);
});
}
}
它不起作用。我甚至没有加载start.php。我认为路径是不正确的。据我在Laravel中看到的,这是一个帮助函数,因此如果我没有应用程序,那么它就不工作了。我在Laravel中为我的项目进行了单元和数据库测试,我非常了解使用sqllite进行模拟、存根的过程。但是,我不知道如何创建一个应用程序来测试软件包。我在Laracsts有一个付费帐户。我不认为提供与测试中所有课程的链接有帮助。我认为你没有我正在寻找的经验。如果你观看视频,你会更好地了解如何通过单元测试软件包来构建你的应用程序。Codeception是一个很好的起点,它允许您将记录插入数据库,并通过API调用检索它们,通过API调用将数据放入应用程序,并检查它们是否确实在数据库中。我建议从codeception开始,因为它包括phpunit。如果你看了视频,你就不会问这些问题。看看这个项目中的测试,也许这会对你有所帮助。你也不会在“require dev”中有“laravel/laravel”:“4.2.*”
,而在“require dev”中只有在“require dev”中的开发和测试过程中需要的库,有了这个,你就不会在生产中安装laravel,除非你把它放在“require”里面,因为这是一个laravel包,我在测试时只需要laravel框架,正如require dev中所解释的,开发和测试需要这些包。虽然谢谢你的建议,但我想我会尝试这种方法。这应该是最佳实践吗?