1

在工作台中测试我的包的方法是什么。如果我编写单元测试,则不会自动加载任何类。所以这意味着:

<?php

use \Mockery as m;

class ExampleTest extends TestCase {

public function tearDown()
{
    m::close();
}

/**
 * A basic functional test example.
 *
 * @return void
 */
public function testShouldReturnValidServer()
{

    $mock = m::mock('MailChimp[sendCurl]');

    MailChimp::listSubscribe( array( 'id' => 'c79a023ff2', 'email_address' => 'dennieriechelman@gmail.com'));

   }
}

导致错误提示找不到类 TestCase。当我将类 TestCase 添加到我的 composer.json (我的包文件夹中的那个)的自动加载中时,该类可用。但是,我收到下一个错误,即“Illuminate\Foundation\Testing\TestCase”不可用等等等。所以我的问题是我应该在我的包文件夹中的 composer.json 中自动加载什么?就像我的主要 composer.json 中的所有内容一样,或者还有其他一些我遗漏的方式。

我知道手册上说“

你可以从 workbench/[vendor]/[package] 目录 git init 并直接从工作台 git push 你的包!这将允许您在应用程序上下文中方便地开发包,而不会被不断的作曲家更新命令所困扰。

但是我不明白这一点。有人可以解释这是什么意思吗?顺便说一句,我熟悉 git。我只是不明白上下文。

EDIT1 据我所知,您将包推送到存储库,然后将其作为包包含在您的主 composer.json 中。我只是不明白这对开发有什么帮助。希望我理解错了.. :)

EDIT2 我错了。你把你的包放在工作台上,直到它稳定为止。就像 Nils 在下面指出的那样。问题仍然存在。如何创建一个可以在启动应用程序时进行单元测试的环境。我的意思是像测试一个模型,我可以在其中模拟外墙等。或者在工作台上这样做是不好的做法?

4

3 回答 3

7

为此,我在https://github.com/orchestral/testbench创建了一个包

于 2013-06-12T04:35:19.727 回答
2

如果您不介意将工作台测试的结果与主应用程序的结果合并,您可以简单地将额外的目录添加到 laravel 根目录中的主 phpunit.xml,如下所示:

<testsuites>
    <testsuite name="Application Test Suite">
        <directory>./app/tests/phpunit/</directory>
        <directory>./workbench/vendor/packageOne/tests/</directory>
        <directory>./workbench/vendor/packageTwo/tests/</directory>
    </testsuite>
</testsuites>

然后在你的包的测试文件夹中,正常放置你的phpunit测试,连同TestCase.php文件,将createApplication()函数调整为:

<?php

class TestCase extends \Illuminate\Foundation\Testing\TestCase {

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

确保您的包 composer.json 自动加载 TestCase.php 文件,如下所示:

"autoload": {
    "classmap": [
        "tests/phpunit/TestCase.php"           
    ]
}

运行 composer dump-autoload -o 以使所有内容对齐,然后您应该能够从 laravel 根目录运行 phpunit,它将测试您的应用程序和包。

于 2014-12-11T20:55:35.453 回答
0

从正确的命名空间扩展,您应该能够从包目录运行测试。

class ExampleTest extends \Illuminate\Foundation\Testing\TestCase {
    ..
}

另请参阅工作台中的 Laravel 整洁的测试助手?

于 2014-02-07T18:30:43.123 回答