2

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

我做了修改composer.json并添加了这样的 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 中执行要求时,我在使用路径创建框架时出错 ./vjroby/laravel-nonce/vendor/laravel/laravel/vendor/laravel/framework/src

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

4

3 回答 3

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']);
        });
    
    }
    
    }
    
于 2015-02-12T09:02:29.163 回答
0

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

于 2015-01-27T21:03:34.473 回答
0

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

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

于 2015-01-27T21:29:41.480 回答