标签: phpunit

PHPUnit - 断言两个字符串相等并且它们是

我正在使用 selenium RC 和 PHPunit,但遇到了这个问题。我正在尝试执行assertEqual,但这就是结果:

Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
 abc
 def
Run Code Online (Sandbox Code Playgroud)

步线:

$this->assertEquals("abc\ndef", $this->getValue("text"));
Run Code Online (Sandbox Code Playgroud)

“文本”是“abc\ndef”。

在火狐浏览器中工作正常。问题仅出在 IE 上。结果他没有告诉我什么不相等。

phpunit selenium-rc

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

PHPUnit 增加内存会杀死进程本身

我遇到的问题是,我对某些断言和模拟的单元测试内存不足。内存每秒增加 100MB,然后在达到最大可用内存时终止 phpunit 进程。

我希望测试失败并显示一些有用的消息,但因为它只是终止进程,所以我真的不知道如何调试它。

知道为什么或如何调试这种行为吗?

memory phpunit mocking symfony

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

使用 phpunit 测试异常消息

我的 phpunit 测试:

<?php
class TestTest extends PHPUnit_Framework_TestCase
{
        /*
         * @expectedExceptionMessage success
         */
    public function testExceptionMessage() {
        throw new Exception('success');
    }
}
Run Code Online (Sandbox Code Playgroud)

单元测试失败。这是 phpunit 的输出:

There was 1 error:

1) TestTest::testExceptionMessage
Exception: success

/path/to/TestTest.php:8

FAILURES!                          
Tests: 1, Assertions: 0, Errors: 1.
Run Code Online (Sandbox Code Playgroud)

在我看来,测试应该成功,因为异常消息是成功的,这正是 @expectedExceptionMessage 所期望的?

php phpunit

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

如何将 PHPUnit 中代码覆盖率的切换点百分比从 90% 更改为 75%?

当我运行包含覆盖范围的 PHPUnit 套件时,我在生成的 HTML 中得到以下内容:

Legend
Low: 0% to 50% Medium: 50% to 90% High: 90% to 100%
Generated by PHP_CodeCoverage 2.0.13 using PHP 5.5.9-1ubuntu4.5 and PHPUnit 4.4.0 at Sun Dec 21 20:21:31 UTC 2014. 
Run Code Online (Sandbox Code Playgroud)

50% 和 90%“切换点”是否可配置(这样我可以分别更改为 35% 和 75%)?如何?

phpunit code-coverage

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

Laravel setUpBeforeClass 上的 PHPUnit 找不到工厂类

我正在尝试运行一个单元测试,在测试运行之前将数据输入到数据库中。我已经定义了一个设置方法,它为我不想要的每个测试用例运行。setup 方法可以正常执行,没有问题。我想要的是将数据输入数据库一次,然后由所有测试用例使用。所以我设置了一个静态函数 setUpBeforeClass。

public static function setUpBeforeClass() : void {
    parent::setUpBeforeClass();
    static::$journalOption = new JournalOption;
    $this->user = factory(User::class)->create();


}
Run Code Online (Sandbox Code Playgroud)

当调用用户工厂类时,我收到以下错误:

InvalidArgumentException:无法找到名称为 [默认] [App\User] 的工厂

UserFactory.php 文件存在于 database/factories/UserFactory.php

<?php

use Illuminate\Support\Str;
use Faker\Generator as Faker;


$factory->define(App\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => Str::random(10),
    ];
});
Run Code Online (Sandbox Code Playgroud)

phpunit laravel

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

使用 Symfony PHPUnit 桥 ClockMock 设置日期/时间

我不知道如何设置ClockMock班级使用的日期/时间。在文档中:

此外,该函数date()是模拟的,因此如果未指定时间戳,它将使用模拟的时间。其他带有可选时间戳参数默认为的函数time()仍将使用系统时间而不是模拟时间。

这就是我试图做的:

class Foo
{
    public function now(): string {
        return date('Y-m-d');
    }
}


/**
 * @covers Foo
 * @group time-sensitive
 */
class FooTest extends TestCase
{
    /**
     * @covers Foo::now
     */
    public function testNow(): void {
        ClockMock::register(Foo::class);
        ClockMock::withClockMock('2019-01-01');

        $f = new Foo();
        static::assertSame('2019-01-01', $f->now());
    }
}
Run Code Online (Sandbox Code Playgroud)

断言仍然失败,实际日期是今天的日期。

我什至尝试date('Y-m-d')在测试类中的断言内部调用,但它仍然返回今天的日期而不是模拟日期。

如何设置模拟日期?

php phpunit symfony

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

Laravel assertJson 失败

我对这个测试有问题:

$this->json('POST', 'api/login')
        ->assertStatus(422)
        ->assertJson([
            'email' => ['The email field is required.'],
            'password' => ['The password field is required.'],
        ]);
Run Code Online (Sandbox Code Playgroud)

我不明白错误是什么:

Unable to find JSON: 

[{
    "email": [
        "The email field is required."
    ],
    "password": [
        "The password field is required."
    ]
}]

within response JSON:

[{
    "message": "The given data was invalid.",
    "errors": {
        "email": [
            "The email field is required."
        ],
        "password": [
            "The password field is required."
        ]
    }
}].


Failed asserting that an array has the …
Run Code Online (Sandbox Code Playgroud)

phpunit laravel

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

Laravel 5.8 Nova 登录测试会话缺少预期的密钥 [错误]

我正在尝试编写一个简单的单元测试,如果我尝试在我的 Laravel Nova 中使用无效用户登录,但在运行测试时我不断收到此错误:

会话缺少预期的键 [错误]。

断言 false 为真失败。

我的测试:

public function an_invalid_user_can_not_login()
{
    $user = factory(User::class)->create();

    $response = $this->post('/nova/login', [
        'email' => $user->email,
        'password' => 'invalid',
        '_token' => csrf_token(),
    ]);

    $response->assertSessionHasErrors();
    $this->assertGuest();
}
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

编辑

它在这一行失败:

$response->assertSessionHasErrors();
Run Code Online (Sandbox Code Playgroud)

phpunit unit-testing laravel laravel-5 laravel-nova

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

使用来自 docker-compose 的 docker 远程解释器在 Intellij 中运行 PHPUnit 期望“/opt/project”中的项目

我在 IntelliJ(2019.3.2,Build #IU-193.6015.39)中加载了一个 PHP symfony 项目,其结构如下(省略了不相关的文件,如 README 等):

<project_root>
+- src/
+- tests/
+- vendor/
|  +- autoload.php    
+- .env
+- composer.json
+- composer.lock
+- docker-compose.yml
+- Dockerfile
+- phpunit.xml
+- phpunit-custom.xml
Run Code Online (Sandbox Code Playgroud)

项目解释器通过 docker-compose 设置为使用远程 docker(Docker for Mac),并且 IntelliJ 正确检测解释器和调试器: 在此处输入图片说明

docker-compose.yml 具有以下结构:

version: "2"

services:
    app:
        build: .
        env_file:
            - ./.env
        ports:
            - 8888:80
        volumes:
            - ./:/var/www/
            - .docker/app-dev/nginx/fastcgi-timeouts.conf:/etc/nginx/fastcgi-timeouts.conf
            - .docker/app-dev/php/conf.d/00_opcache.ini:/etc/php/conf.d/00_opcache.ini
            - .docker/app-dev/php/conf.d/30_xdebug.ini:/etc/php/conf.d/30_xdebug.ini
            - .docker/app-dev/php/php-fpm-settings.conf:/etc/php/php-fpm-settings.conf

    db:
        image: mysql:5.6
        environment:
            MYSQL_DATABASE: project_database
            MYSQL_USER: user
            MYSQL_PASSWORD: password
            MYSQL_ROOT_PASSWORD: master_password
        ports:
            - 3306:3306 …
Run Code Online (Sandbox Code Playgroud)

php phpunit intellij-idea docker docker-compose

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

强密码验证 laravel

因此,在任何人关闭此功能之前,我将在这里参考答案并提出问题

所以我的问题是我想要对 laravel 进行强密码验证,包括 10 个字符、数字、大写小写等等。

我找到了:https : //stackoverflow.com/a/31549892/1270259

问题是,这个正则表达式看起来不对:

/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/
Run Code Online (Sandbox Code Playgroud)

由于我不擅长正则表达式,我想我会问如何修复它以使其验证:

  • 长度必须为 10 个字符
  • 必须包含大小写
  • 必须至少包含一个数字
  • 必须至少包含一个特殊字符。

我觉得他们的答案很接近。当这是针对 github 操作运行时,返回的错误是preg_match(): Compilation failed: escape sequence is invalid in character class at offset 46.

我也有任何想法如何让 Laravel 7 工作以匹配上述约束?

php regex phpunit laravel laravel-7

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