我必须用内部数组测试一个数组。
我的数组如下所示。
$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() 循环。
请为此建议我一些解决方案。
我正在编写一个单元测试,说明应该使用 bcrypt 对用户密码进行散列。要断言这一点,我需要能够检查字符串是否看起来像 bcrypt 哈希。
我找不到一个函数来告诉我在字符串上使用了什么散列算法,除了正则表达式之类的方法之外,还有其他方法可以做到吗?
我正在使用 Jenkins、Ant 和 PHPUnit 4.5.0 运行 PHP 项目的持续集成。Jenkins 的 xUnit 插件将处理 PHPUnit 生成的 XML 日志。
某些重大错误(例如,引用未推送到 VCS 的文件)只会在 PHPUnit 中引发 PHP 警告,并且警告不会包含在日志中。因此,即使需要修复,构建也会被标记为成功。
如何使 PHP 警告使构建失败,例如通过为产生警告的测试引发异常?
标题说明了一切.我想知道如何使用内存中的SQLite数据库正确地使用Dusk建立一个新的Laravel 5.4项目.
我可以运行测试,但是我收到一个错误:"没有这样的表:用户"
我添加了一个.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) 我们正在使用 PHPUnit 来测试我们应用程序的部分内容。在某些测试中,我们想要更改参数的值或覆盖服务(但仅限于该测试,而不是所有测试)。
在测试中动态配置 Symfony 容器的推荐方法是什么?
我们遇到的问题是,当动态设置配置时,容器不会重新编译自身(因为它仅在文件更改时重新编译自身)。
我尝试为我User和Shop模型之间的关系创建单元测试,但是当我运行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) 如何为我的测试启用彩色输出?我尝试了该命令phpunit --color=always file.php,但它不起作用!
感谢帮助!
我想知道如何在我正在测试的模块的功能测试中导入配置同步文件。例如,我想测试一些自定义内容类型,并且 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
我正在为 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 时,我在控制台上看到所有这些烦人的日志消息。有没有办法禁用或以某种方式停止这些日志消息?
我有以下路线:
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)
然而,这在单元测试中看起来是一件非常草率的事情。
有没有其他人遇到过这种情况?是否可以测试流式响应的内容?
phpunit ×10
php ×5
laravel ×3
laravel-5.4 ×2
bcrypt ×1
drupal ×1
drupal-8 ×1
eloquent ×1
hash ×1
jenkins ×1
laravel-dusk ×1
sqlite ×1
symfony ×1
unit-testing ×1