我正在Windows下进行测试,并且命令提示符不能很好地使用默认显示的ANSI颜色代码.当我使用Laravel时,如何关闭彩色显示屏?
经过多年编写单元测试后,我才开始使用CodeceptionPHPUnit.有一件事让我烦恼,我无法找到一种方法来控制调用测试的顺序.
在纯旧的PHPUnit我手动构建测试结构,如下所示:
$suite = new PHPUnit_Framework_TestSuite();
$suite->addTest('MyFirstTest');
$suite->addTest('MySecondTest');
Run Code Online (Sandbox Code Playgroud)
并且将按照它们添加到套件中的顺序调用测试.Codeception另一方面,似乎是在遍历目录并运行它可以找到的每个测试.
我希望能够在两个级别上控制测试的顺序:
unit tests之前acceptance tests)PHPUnit构建套件类似)广告.2:假设我在acceptance目录中有两个测试:
AbcCept.php
WebGuy.php
XyzCept.php
Run Code Online (Sandbox Code Playgroud)
我希望能够运行XyzCept.php之前AbcCept.php.这甚至可能吗?
并且预测挑剔的评论:是的,我知道测试应该能够以任何顺序运行,而不是彼此依赖,但这不是我要求的.
我试图用xdebug执行phpunit代码覆盖,如下所示,
C:\wamp\bin\php\php5.3.22>phpunit -coverage-html /tmp C:\<unittest file pat>\TestRetainer.php
Run Code Online (Sandbox Code Playgroud)
它输出如下,
PHPUnit 3.7.32 by Sebastian Bergmann.
....
Time: 36 ms, Memory: 5.75Mb
OK (4 tests, 12 assertions)
C:\wamp\bin\php\php5.3.22>
Run Code Online (Sandbox Code Playgroud)
但我无法找到报告文件的html版本.
我已经浏览了这个网址http://phpunit.de/manual/current/en/phpunit-book.html#code-coverage-analysis.但我没有找到任何运气.
请帮帮我.
首先,我想说 - 我是用PHP(phpunit)进行单元测试的新手.在我的新项目(slim3框架)中,我想测试我的控制器,例如LoginController.
我的想法是(在单元测试方法中)
LoginController__invoke)我的问题是关于__invoke方法的参数.在Slim3中,可调用的请求方法有两个第一个参数:
RequestInterface $request 和 ResponseInterface $response
如何在单元测试类中创建此参数?我正在寻找这个问题的一些例子,但没有成功.
有什么建议?
我在Slim3测试中发现了一些模拟请求的代码:
protected function requestFactory()
{
$uri = Uri::createFromString('https://example.com:443/foo/bar?abc=123');
$headers = new Headers();
$cookies = array(
'user' => 'john',
'id' => '123',
);
$env = Slim\Http\Environment::mock();
$serverParams = $env->all();
$body = new Body(fopen('php://temp', 'r+'));
$request = new Request('GET', $uri, $headers, $cookies, $serverParams, $body);
return $request;
}
Run Code Online (Sandbox Code Playgroud)
但我不确定这是好方法.
谢谢你的帮助
经过长时间思考这个主题没有结果,我希望有人可以给我一个关于下载phpUnit-Test的提示.如何为此函数创建一个phpUnit测试,该测试执行zip-File的下载?或者是否有通常的做法来测试这样的逻辑?
public function createOutput($zipFolderName) {
$zipFolderName = $zipFolderName."/imageResizer.zip";
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=' . $zipFolderName);
header('Content-Length: ' . filesize($zipFolderName));
readfile($zipFolderName);
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含users表格的Laravel 5.3应用程序.该表上的一个字段是api_token,在数据库定义中设置为NOT NULL.如果我使用Postman并点击我的API端点来创建用户并且不包含该api_token字段,则会收到以下错误:SQLSTATE[HY000]: General error: 1364 Field 'api_token' doesn't have a default value.
我还没有添加代码来生成令牌,所以这正是我所期望的.但是,我有这个PHPUnit测试:
/** @test */
public function a_user_can_be_created()
{
$this->user_data = [
'first_name' => 'Jane',
'last_name' => 'Smith',
'email_address' => 'jsmith@mailinator.com',
'phone' => '1234567890',
'username' => 'jsmith',
'password' => 'testing'
];
$this->post('/api/users', $this->user_data, array(
'Accept' => 'application/json'
))
->assertResponseStatus(201)
->seeJsonEquals(['status' => 'success'])
->seeInDatabase('users', $this->user_data);
}
Run Code Online (Sandbox Code Playgroud)
问题是测试通过了.当用户保存数据库时应该抛出异常,该测试如何成功?
我已经在不同时间点"死亡并倾倒"并确认在自动化测试运行时数据实际上已保存到数据库中.我也尝试使用相同的数据库进行Postman和自动测试(而不是单独的测试数据库) - 相同的结果.
我可以通过link:localhost:8888/streaming_statistic/public在Laravel 5.4上创建我的项目
我有一个测试:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ApiTest extends TestCase
{
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
Run Code Online (Sandbox Code Playgroud)
我用命令运行所有测试
./vendor/bin/phpunit
Run Code Online (Sandbox Code Playgroud)
但结果是:
PHPUnit 5.7.13 by Sebastian Bergmann and contributors.
F 1 / 1 (100%)
Time: 222 ms, Memory: 12.25MB
There was 1 failure:
1) Tests\Feature\ApiTest::testBasicTest
Expected status code 200 but received 404.
Failed asserting that false is true.
/Applications/MAMP/htdocs/streaming_statistic/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:56
/Applications/MAMP/htdocs/streaming_statistic/tests/Feature/ApiTest.php:16
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
Run Code Online (Sandbox Code Playgroud)
我可以打开这个页面http:// localhost:8888/streaming_statistic/public …
我正在尝试开发一个Laravel编写器包并从中运行单元测试.在过去几天阅读各种过时且矛盾的指南和博客后,我对如何解决这个问题感到困惑.
这是我目前所知道的:
我可以让Orchestra Test Bench从给出的示例中进行一些基本测试,但我并不真正理解发生了什么,文档几乎没有解释.在测试我的应用程序的路由时,我无法获得任何工作.
我不明白Orchestra和Dusk是否可以一起玩,或者我必须在它们之间做出选择.如果是这样,我应该使用哪一个?如果它是我应该使用的Laravel Dusk,那么如何在我的包目录中运行它?
TLDR:
如何为FilePostRedirectGet表单提交请求编写集成测试?
在我的应用程序中,我有一个多页面的表单,里面有一个文件元素.最初控制器代码是(伪代码 - 删除所有多页面内容):
$form = new MyForm();
if($this->getRequest()->isPost()) {
if($form->isValid($this->getRequest()->getPost()) {
//move file to new home and save post to database.
return $this->redirect()->toRoute('admin/cms/edit');
}
}
return new ViewModel(['form' => $form]);
Run Code Online (Sandbox Code Playgroud)
基本上,如果表单有效,它将保存表单详细信息并执行重定向(通常是页面的编辑版本).如果表单无效,它将仅使用相应的错误消息再次显示该表单.
这种方法的问题是,如果其中一个表单元素未通过验证,则文件输入将失去其值,用户将需要重新上载其文件.为了解决这个问题,我改为FPRG方法:
$form = new MyForm();
/* @var $prg FilePostRedirectGet */
$prg = $this->filePostRedirectGet($form, $this->url()->fromRoute($this->routeMatch, ['action' => $this->action, 'id' => $id], ['query' => ['page' => $page]]), true);
if ($prg instanceof Response) {
return $prg; // Return PRG redirect response
} elseif ($prg !== false) {
//move …Run Code Online (Sandbox Code Playgroud) 我有很多不同形式的观点,有些形式有reCaptcha保护,有些则没有.具有reCaptcha保护的表单是关键的(注册,登录,还原等),这就是为什么它们应该被测试.
我不想做的事:
debug,test这把验证码断标志(不安全?).使用reCaptcha测试表单的标准方法是什么?
phpunit ×10
unit-testing ×5
php ×4
laravel-5 ×3
laravel ×2
ansi-colors ×1
codeception ×1
laravel-5.4 ×1
laravel-dusk ×1
plugins ×1
recaptcha ×1
slim ×1
slim-3 ×1
symfony ×1
testing ×1
xdebug ×1