标签: phpunit

PHPUnit coverage-html 分析了错误的文件夹

我在 ZF2“入门”教程之后学习 Zend Framework 2 。现在我有一个简单的应用程序,即 IndexController 的 PHPUnit 测试(代码是从教程的首字母“单元测试”中复制的)。测试有效。现在我正在尝试创建一个代码覆盖率报告:

# phpunit --coverage-html ./report
Run Code Online (Sandbox Code Playgroud)

或者

# phpunit --coverage-html ./report ApplicationTest/Controller/IndexControllerTest.php
Run Code Online (Sandbox Code Playgroud)

我期望整个文件夹test(第一个示例)或IndexControllerTest(第二个示例)的覆盖率报告。

我目前得到的是这份报告:

在此处输入图片说明

为什么?以及如何让代码覆盖脚本处理我想分析的文件/文件夹。

编辑:

我可以导航到我的模块文件夹并查看它的报告:

在此处输入图片说明

但问题保持不变:(1)为什么它会这样工作以及(2)如何使代码覆盖脚本处理(仅)我想分析的文件/文件夹。

php phpunit code-coverage report

1
推荐指数
1
解决办法
3736
查看次数

无法安装梨安装 phpunit/PHPUnit_Selenium

我正在尝试PHPUnit_Selenium使用命令安装

pear install phpunit/PHPUnit_Selenium

我正在运行的梨版本是 1.9.4。上面的命令返回

正在尝试发现频道“phpunit”...尝试在频道“phpunit”上回退到 https 而不是 http...“phpunit/PHPUnit_Selenium”中的未知频道“phpunit”无效包名称/包文件“phpunit/PHPUnit_Selenium”安装失败

搜索谷歌我发现这个(几次)作为建议。所以我试过了

pear channel-discover pear.phpunit.de

sudo pear channel-discover pear.phpunit.de (以防它有所作为)

上一个命令返回

通过 http:// 发现频道 pear.phpunit.de 失败并显示消息:频道添加:无法打开“ http://pear.phpunit.de/channel.xml ”(文件http://pear.phpunit.de:80 /channel.xml无效(收到:HTTP/1.1 403 Forbidden(Forefront TMG 拒绝指定的统一资源定位符(URL)。)))试图通过 https:// 发现频道 pear.phpunit.de 而不是发现频道“pear” .phpunit.de”失败(频道添加:无法打开“ https://pear.phpunit.de/channel.xml ”(连接到`pear.phpunit.de:443'失败:操作超时))

我需要做什么来安装 PHPUnit_Selenium?

selenium pear phpunit

1
推荐指数
1
解决办法
7659
查看次数

PHPUnit 和 Selenium 以及从元素问题中获取价值

所以我从PHPUnitSelenium 2 开始

public function testHasALoginForm()
{
    $this->url('/login');

    $username = $this->byName('username');
    $password = $this->byName('password');

    $this->assertEquals('', $username->value());
    $this->assertEquals('', $password->value());
}
Run Code Online (Sandbox Code Playgroud)

这只发生在我value()从元素调用方法时,我最终得到:

1) test\view\LoginTest::testHasALoginForm
PHPUnit_Extensions_Selenium2TestCase_WebDriverException: GET /session/fdcf0669-1d42-4a35-8e7a-29dec4a0f1e4/element/0/value
Build info: version: '2.42.1', revision: '68b415a', time: '2014-05-29 16:16:49'
System info: host: 'Something.local', ip: '192.168.1.108', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.3', java.version: '1.8.0_05'
Driver info: driver.version: unknown
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?

php testing selenium phpunit

1
推荐指数
1
解决办法
1276
查看次数

如何测试使用 Storage Facade 的类?

在我制作的 Laravel 5 包中,有一个类以某种方法FileSelector使用Storage-facade

public function filterFilesOnDate($files, DateTime $date)
{
    return array_filter($files, function($file) use($date){
        return Storage::lastModified($file) < $date->getTimeStamp();
    });
}
Run Code Online (Sandbox Code Playgroud)

这个类Storage::disk()在它的构造函数中接受一个路径(到一些文件)和一个。

现在我正在尝试使用 Orchestra Testbench 为这个特定的类编写一些基本的单元测试。

setUp 函数如下所示:

protected $fileSelector;
protected $date;

public function setUp()
{
    parent::setUp();
    $this->date = new DateTime();
    $this->fileSelector = new fileSelector('tests/_data/backups', Storage::disk('local'));
}
Run Code Online (Sandbox Code Playgroud)

失败的测试是:

public function test_if_files_are_filtered_on_date()
{
    $files = Storage::allFiles('tests/_data/backups');

    $filteredFiles = $this->fileSelector->filterFilesOnDate($files, $this->date);
}
Run Code Online (Sandbox Code Playgroud)

Storage::allFiles('tests/_data/backups')根本不返回任何文件。路径是正确的,因为使用File-facade返回所需的文件,但这与filterFilesOnDate()-method不兼容,因为它使用 Storage。

使用File-facade 会产生以下错误:

League\Flysystem\FileNotFoundException: …
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing orchestra laravel

1
推荐指数
1
解决办法
1918
查看次数

PHPUnit - 检查数组是否包含特定类型的对象

在 PHPUnit 中进行单元测试时,我需要检查数组是否至少包含一个特定类型的对象。

这是我正在寻找的一个简单的例子

$obj_1 = new Type1;
$obj_2 = new Type2; 

$container = array( $obj_1, $obj_2 );

// some logic and array manipulation here

// need something like this
$this->assertArrayHasObjectOfClass( 'Type1', $container );
Run Code Online (Sandbox Code Playgroud)

显然我可以使用自定义代码来做到这一点,但是是否有任何断言(或它们的组合)允许我这样做?

我需要在多个测试中多次这样做,如果我需要的断言不存在,我该如何扩展 PHPUnit 断言集?

编辑:具有特征的自定义解决方案

正如 Vail 所建议的,我想出了一个使用特征的自定义解决方案。这是一个示例版本。

// trait code
trait CustomAssertTrait
{
    public function assertArrayHasObjectOfType( $type, $array, $message = '' ) {

        $found = false;

        foreach( $array as $obj ) {
            if( get_class( $obj ) === $type ) {
                $found = true;
                break;
            } …
Run Code Online (Sandbox Code Playgroud)

php arrays phpunit unit-testing

1
推荐指数
1
解决办法
4504
查看次数

如何通过composer在xampp上安装phpunit?

正如下面暗示的那样:(PEAR 安装方法的生命周期结束)不支持通过 pear 安装 phpunit。所以我如何通过 composer 在 xampp 上安装它?需要为新的 xampp 卸载先前的 phpunit 吗?

xampp phpunit composer-php

1
推荐指数
1
解决办法
4534
查看次数

在 Laravel phpunit 测试中使用 Crypt

我正在使用 phpunit 和 Laravel 来执行一些测试。我有很多加密的数据库数据。

在我的一次测试中,我填写了一张表格,完成后,数据将使用Crypt::encrypt('data from field goes here').

这是代码:

$this->visit('/requests/create')
             ->seePageIs('/requests/create')
             ->type('FirstNameTest1', 'first_name')
             ->press('Create Request')
             ->see('The request has been created.');

// Fails here
$this->seeInDatabase('requests', ['first_name' => Crypt::encrypt('FirstNameTest1')]);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

无法找到数据库表[要求]排匹配的属性[{“FIRST_NAME”:“eyJpdiI6InFWbGJmSU9rR0NHMjFnMjR4QVVyalE9PSIsInZhbHVlIjoiaDBMcGNxYzdsRlhjNDd3M2E5OGxQbUVkaHhzdEpIOERDcytwQytzZUN4MD0iLCJtYWMiOiJlN2U2MzczYTlhMDgyYTMxOWJmMGQyZDU0MzFiMmZiZjhkMDM1ZjA2YWFhZGVkYTZhMGRkNGMzNDY0ZTAzMjZmIn0 =”}]。

我尝试手动检查记录创建后是否存在,但没有显示。我记得读过一些关于运行测试时数据不持久的内容,所以这是有道理的......但是你能想到在测试期间无法找到该记录的任何原因吗?

php encryption phpunit laravel laravel-5

1
推荐指数
1
解决办法
1320
查看次数

phpunit无法在laravel 5.7的全新安装上工作

我刚安装的Laravel出现问题。

当我尝试使用phpunit命令运行默认值时ExampleTest.php,出现以下错误

D:\Laravel\Rahimi0151>phpunit
PHP Warning:  "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in C:\xampp\php\pear\PHPUnit\TextUI\Command.php on line 277

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in C:\xampp\php\pear\PHPUnit\TextUI\Command.php on line 277
PHP Warning:  "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in C:\xampp\php\pear\PHPUnit\TextUI\Command.php on line 285

Warning: "continue" targeting switch is equivalent to "break". Did …
Run Code Online (Sandbox Code Playgroud)

php testing phpunit laravel laravel-5.7

1
推荐指数
1
解决办法
1309
查看次数

PHPUnit测试找不到工厂

我有一个使用JobFactory和的单元测试ClientFactory

<?php

namespace Tests\Unit;

use PHPUnit\Framework\TestCase;

class JobTest extends TestCase
{
    /** @test */
    function can_display_job_details()
    {
        $job = create('App\Job', [
            'job-number' => 9999,
            'site' => 'Homeville',
            'client_id' => function(){
                return create('App\Client', [
                    'name' => 'ACME'
                ])->id;
            },

        ]);

        $details = $job->job_details;

        $this->assertEquals('EPS-9999-Homeville-RES', $details);

    }
}
Run Code Online (Sandbox Code Playgroud)

运行测试时出现此错误

InvalidArgumentException : Unable to locate factory with name [default] [App\Job].
Run Code Online (Sandbox Code Playgroud)

我在功能测试中使用出厂的App \ Job(JobFactory),没有任何问题。我使用PhpStorm的内置PHPUnit测试功能。

我运行创建并通过一个小测试助手

<?php

function create($class, $attributes = [], $times = null)
{
    return factory($class, $times)->create($attributes);
}

function …
Run Code Online (Sandbox Code Playgroud)

phpunit phpstorm laravel

1
推荐指数
1
解决办法
96
查看次数

我如何通过运行Xdebug的PHPUnit加快测试速度

我上运行的测试PHPUnit使用Xdebug,用于生成覆盖率,这是非常缓慢的。

我尝试使用,PHPdbg但这会导致内存错误。

有人告诉我可以创建一个过滤器文件,这会有所帮助。谁能告诉我这将如何工作。

php phpunit xdebug

1
推荐指数
1
解决办法
65
查看次数