【问题标题】:How can I do unit and database testing on a Laravel 4 package?如何在 Laravel 4 包上进行单元和数据库测试?
【发布时间】:2015-02-12 17:02:29
【问题描述】:

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

我对@9​​87654323@进行了修改,并添加了这样的Laravel包

 "require-dev": {
        "phpunit/phpunit" : "4.*",
        "laravel/laravel": "4.2.*"
    },

composer update 之后,我创建了一个类似于 Laravel 的 TestCase 类

public function createApplication()
    {
        $unitTesting = true;
        $testEnvironment = 'testing';
        return require __DIR__.'/../vendor/laravel/laravel/bootstrap/start.php';
    }

问题是在 start.php 中执行 require 时,我在使用路径创建框架时出错 ./vjroby/laravel-nonce/vendor/laravel/laravel/vendor/laravel/framework/src

因为没有这样的文件,所以文件在 ./vjroby/laravel-nonce/vendor/laravel/framework/src

【问题讨论】:

  • 我想我会尝试这种方法here。这应该是最佳做法吗?

标签: php unit-testing laravel-4 package database-testing


【解决方案1】:

我设法将数据库测试与内存中的 sqlite 集成在一起。 我正在发布答案,所以也许将来有人会需要它。

  1. 我在测试目录中创建了一个引导目录
  2. 我修改了 phpunit.xml 以从 boostrap 目录加载自动加载:bootstrap="tests/bootstrap/autoload.php"
  3. 在 boostrap 目录中,我有 3 个文件 Git Link,在这些文件的帮助下,我能够创建一个 Laravel 应用程序来进行测试
  4. 以上是我的数据库测试,我不得不进行迁移,因为我无法让应用程序运行 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']);
        });
    
    }
    
    }
    

【讨论】:

    【解决方案2】:

    require base_path('vendor/laravel/laravel/bootstrap/start.php');

    【讨论】:

    • 它不起作用。我什至不加载start.php。我认为路径不正确。
    • 据我在 Laravel docs 中看到的,这是一个辅助函数,所以如果我还没有 app,那么它就不起作用。
    【解决方案3】:

    查看 Laracasts 视频。您将看到使用 Codeception、Behat 和 PHPUnit 进行单元测试。您将了解使用哪些库以及使用这些工具进行开发的工作流程和过程。

    https://laracasts.com/search?q=testing&q-where=lessons

    【讨论】:

    • 我在 Laravel 中为我的项目进行了单元和数据库测试,我非常了解 Mockery、存根、使用 sqllite 的过程。但是,我不知道如何创建一个用于测试包的应用程序。我在 Laracsts 有一个付费账户。我不认为提供所有测试课程的链接有帮助。我认为你没有我正在寻找的经验。
    • 如果您观看视频,您将更好地了解如何通过对包进行单元测试来构建您的应用程序。 Codeception 是一个很好的起点,它将允许您将记录插入数据库并通过 API 调用检索它们,并通过 API 调用将数据放入您的应用程序并检查它们是否确实在数据库中。我建议从 codeception 开始,因为它包括 phpunit。如果您观看视频,就不会问这些问题。
    • 看看这个项目中的测试github.com/Codeception/sample-l4-app/blob/master/tests/api/…也许对你有帮助。
    • 你也不会在“require-dev”中有"laravel/laravel": "4.2.*",而是在“require”中只有在“require-dev”中开发和测试期间需要的库,这样你就赢了'除非你把 laravel 安装在“require”里面
    • 因为是 Laravel 包,所以我在测试时只需要 Laravel 框架,所以正如 here 在 require-dev 中解释的那样,有开发和测试所需的包。虽然感谢您的提示。
    猜你喜欢
    • 1970-01-01
    • 2018-04-19
    • 2014-05-11
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    相关资源
    最近更新 更多