标签: phpunit

如何使用 phpunit 测试内部数组

我必须用内部数组测试一个数组。

我的数组如下所示。

$testdata=Array
    (
        [0] => Array
            (
                [label] => 'Ammy'
                [idr] => 'user7'
                [rel] => 7
            )

        [1] => Array
            (
                [label] => 'sidh'
                [idr] => user8
                [rel] => 8
            )

        [2] => Array
            (
                [label] => 'Alan'
                [idr] => 'user9'
                [rel] => 9
            )
    )
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我的要求是使用 phpunit 的 assertArrayHasKey() 断言来断言内部数组的键是否存在。我试着这样做

foreach ($testdata as $values) {
 //print_r($values);
  $this->assertArrayHasKey('idr', $values);
  $this->assertArrayHasKey('rel', $values);

}
Run Code Online (Sandbox Code Playgroud)

但这对我不起作用。甚至控件也不会进入 foreach() 循环。

请为此建议我一些解决方案。

phpunit

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

检查字符串是否为 bcrypt 哈希的最简单快捷的方法是什么?

我正在编写一个单元测试,说明应该使用 bcrypt 对用户密码进行散列。要断言这一点,我需要能够检查字符串是否看起来像 bcrypt 哈希。

我找不到一个函数来告诉我在字符串上使用了什么散列算法,除了正则表达式之类的方法之外,还有其他方法可以做到吗?

php hash phpunit bcrypt

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

如何使 PHP 警告无法通过 PHPUnit 测试用例?

我正在使用 Jenkins、Ant 和 PHPUnit 4.5.0 运行 PHP 项目的持续集成。Jenkins 的 xUnit 插件将处理 PHPUnit 生成的 XML 日志。

某些重大错误(例如,引用未推送到 VCS 的文件)只会在 PHPUnit 中引发 PHP 警告,并且警告不会包含在日志中。因此,即使需要修复,构建也会被标记为成功。

如何使 PHP 警告使构建失败,例如通过为产生警告的测试引发异常?

php phpunit integration-testing automated-tests jenkins

7
推荐指数
2
解决办法
4156
查看次数

使用phpunit.xml,.env.dusk.local和sqlite内存数据库在Dusk中设置Laravel 5.4

标题说明了一切.我想知道如何使用内存中的SQLite数据库正确地使用Dusk建立一个新的Laravel 5.4项目.

我可以运行测试,但是我收到一个错误:"没有这样的表:用户"

  • 我创建了一个新的Laravel 5.4项目
  • 已安装黄昏并添加了服务提供商
  • 我正在使用测试身份验证的laravel文档中的测试.它已包含DatabaseMigrations特征
  • 我可以运行测试,第一个工作(导航到/ login路由),但第二个尝试登录失败.

我添加了一个.env.dusk.local包含

APP_ENV=local
APP_KEY=RANDOM_STRING_HERE
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://laravel54.dev

DB_CONNECTION=sqlite
DB_DATABASE=':memory:' // I've also tried just :memory: and also adding these details to the config/database.php file but to no avail
Run Code Online (Sandbox Code Playgroud)

这是我正在运行的测试(直接来自文档)

<?php

namespace Tests\Browser;

use App\User;
use Tests\DuskTestCase;
use Laravel\Dusk\Chrome;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class LoginTest extends DuskTestCase
{
    use DatabaseMigrations;

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

        $this->browse(function ($browser) use ($user) {
            $browser->visit('/login')
                ->type('email', $user->email)
                ->type('password', 'secret')
                ->press('Sign in') …
Run Code Online (Sandbox Code Playgroud)

sqlite phpunit laravel laravel-5.4 laravel-dusk

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

如何在 PHPUnit 测试中设置 Symfony 中的参数或服务?

我们正在使用 PHPUnit 来测试我们应用程序的部分内容。在某些测试中,我们想要更改参数的值或覆盖服务(但仅限于该测试,而不是所有测试)。

在测试中动态配置 Symfony 容器的推荐方法是什么?

我们遇到的问题是,当动态设置配置时,容器不会重新编译自身(因为它仅在文件更改时重新编译自身)。

phpunit symfony

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

Laravel 5单元测试 - 在null上调用成员函数connection()

我尝试为我UserShop模型之间的关系创建单元测试,但是当我运行vendor\\bin\\phpunit这个错误时,我不知道这个,因为我是单元测试的新手.我试图在我的控制器上运行我的代码以查看关系是否真的有效,幸运的是它按预期工作,但在phpunit中运行时却没有.这个phpunit没有与Models一起工作,我做错了什么?

Fatal error: Uncaught Error: Call to a member function connection() on null in E:\projects\try\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php:1013

Stack trace: E:\projects\try\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(979): Illuminate\Database\Eloquent\Model::resolveConnection(NULL)

这是我的UserTest.php

<?php

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

use App\User;
use App\Shop;

class UserTest extends TestCase
{

    protected $user, $shop;

    function __construct()
    {
        $this->setUp();
    }

    function setUp()
    {
        $user = new User([
            'id' => 1,
            'first_name' => 'John',
            'last_name' => 'Doe',
            'email' => 'JohnDoe@example.com',
            'password' => 'secret',
            'facebook_id' => null,
            'type' => 'customer', …
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing eloquent laravel-5.4

7
推荐指数
4
解决办法
6255
查看次数

PHPUnit 不输出颜色

如何为我的测试启用彩色输出?我尝试了该命令phpunit --color=always file.php,但它不起作用!

感谢帮助!

phpunit

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

如何在 Drupal 8 功能测试中导入配置同步文件?

我想知道如何在我正在测试的模块的功能测试中导入配置同步文件。例如,我想测试一些自定义内容类型,并且 config/sync 中有许多文件与定义自定义内容类型的节点模块有关。

class ArticleControllerTest extends BrowserTestBase {
    protected static $modules = ['node', 'dist_source'];
}
Run Code Online (Sandbox Code Playgroud)

在测试的顶部,我定义了成功导入的模块,但它不包括配置同步设置,因此我的自定义内容类型都不存在。如何将这些导入到我的测试环境中?

phpunit drupal functional-testing configuration-management drupal-8

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

当 phpunit 测试运行时,如何禁用在控制台上显示应用程序日志消息?

我正在为 Laravel 应用程序编写测试,特别是针对在控制台上写入大量日志消息的进程。

例如

Log::info('Process starts', [
    'process_name' => 'product_import',
    'data' => // a huge text containing json_encode of the given message object
]
Run Code Online (Sandbox Code Playgroud)

当我运行 phpunit 时,我在控制台上看到所有这些烦人的日志消息。有没有办法禁用或以某种方式停止这些日志消息?

php phpunit laravel

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

测试流式响应

我有以下路线:

Route::get('echo',function (Request $req) {
    return response()->stream(function () use ($req) {
        echo json_encode($req->all());
    }, 200, [
        'Content-Type' => 'application/json'
    ]);
})->name('echo');
Run Code Online (Sandbox Code Playgroud)

为了简单起见,我们假设它是一个简单的回声响应。实际上,这是一个非常大的文件。两种情况下的结果都是一样的。

现在我想测试这条路线,看看我是否确实可以看到那个 json 内容,所以我试过这个:

public function testBasicTest()
{

    $response = $this->get(route('echo', [
        "content"=>"some content"
    ]));
    $response->assertSeeText("some content"); //Doesn't work
    $response->assertJson( [
        "content"=>"some content"
    ]); //Neither does this
}
Run Code Online (Sandbox Code Playgroud)

我进一步检查了它,这似乎是因为 (a) 响应被包裹 a TestResponse(b) 响应内容从不流式传输和 (c) 即使响应内容将通过$response->baseResponse->sendContent()实际内容强制流式传输被回显而不是被实际捕获TestResponse

此外调用$response->getContent()不起作用,因为它似乎直接调用StreamedResponse::getContent()硬编码的 return false

我使用以下方法取得了一些有限的成功:

ob_start();
$response->sendContent();
$result = ob_get_clean();
Run Code Online (Sandbox Code Playgroud)

然而,这在单元测试中看起来是一件非常草率的事情。

有没有其他人遇到过这种情况?是否可以测试流式响应的内容?

php phpunit laravel

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