【问题标题】:Laravel workbench unit testLaravel 工作台单元测试
【发布时间】:2013-05-30 14:23:24
【问题描述】:

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

<?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 并直接从 workbench git push 您的包!这将允许您在应用程序上下文中方便地开发包,而不会被不断的作曲家更新命令所困扰。

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

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

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

【问题讨论】:

  • 手册说的正好相反:如果你在开发过程中把你的包放在工作台上,你就不必使用composer。一旦它稳定并且您想在其他地方使用它,您可以将它添加到 composer.json。
  • 谢谢。那是真实的。那么 git push 语句是关于哪里的呢?
  • 那么您希望您的捆绑包(当前位于workbench 中的捆绑包)处于版本控制之下,但与composer 分离。因此,如果您使用 git,您可以在您的 workspace 中执行 git push。您的捆绑包不会显示在 composer.json 中,但可以安装在您的系统中。
  • 是的,好的。这就说得通了。这就是我认为它的意思,但我很困惑。所以这意味着我已经在包的 composer.json 中手动添加了依赖项。谢谢
  • 我已经在stackoverflow.com/a/25391078/747802 回答了对我有用的方法。

标签: unit-testing laravel workbench


【解决方案1】:

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

【讨论】:

  • 您将如何运行工作台测试? phpunit 来自 workbench/vendor/package 还是来自 laravel 根?您是否必须更新 laravel phpunit.xml 文件或添加一个到您的工作台包?
  • 我也想澄清一下
  • 这个包刚刚成为我的新宠。
  • 谢谢,这绝对是救命稻草。对于那些为此苦苦挣扎的人,请仔细阅读the git example 并逐步完成整个过程。
【解决方案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>

然后在你的包的tests文件夹中,像平常一样放置你的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,它将测试您的应用程序和包。

【讨论】:

    【解决方案3】:

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

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

    另见Laravels neat testing helpers in workbench?

    【讨论】:

      猜你喜欢
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2017-09-20
      • 2011-09-15
      • 2019-08-01
      • 1970-01-01
      • 2018-09-11
      相关资源
      最近更新 更多