Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Laravel 4软件包上进行单元和数据库测试?_Php_Unit Testing_Laravel 4_Package_Database Testing - Fatal编程技术网

Php 如何在Laravel 4软件包上进行单元和数据库测试?

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

我正在为Laravel 4.2开发一个包。我想写单元测试和数据库测试。据我所知,为了使用测试中的所有功能,我必须创建一个Laravel应用程序实例

我对
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集成在一起。 我正在发布答案,所以将来可能会有人需要它

  • 我在tests目录中创建了一个引导目录
  • 我修改了phpunit.xml以从boostrap目录加载自动加载:
    bootstrap=“tests/bootstrap/autoload.php”
  • 在boostrap目录中,我有3个文件,在这些文件的帮助下,我能够创建一个Laravel应用程序进行测试
  • 上面是我的数据库测试,我不得不打包迁移,因为我无法让应用程序运行miration,我尝试了
    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中所解释的,开发和测试需要这些包。虽然谢谢你的建议,但我想我会尝试这种方法。这应该是最佳实践吗?