标签: phpunit

如何在Laravel的PHPUnit任务中关闭颜色?

我正在Windows下进行测试,并且命令提示符不能很好地使用默认显示的ANSI颜色代码.当我使用Laravel时,如何关闭彩色显示屏?

php phpunit ansi-colors laravel

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

有没有办法控制Codeception中的测试顺序?

经过多年编写单元测试后,我才开始使用CodeceptionPHPUnit.有一件事让我烦恼,我无法找到一种方法来控制调用测试的顺序.

在纯旧的PHPUnit我手动构建测试结构,如下所示:

$suite = new PHPUnit_Framework_TestSuite();
$suite->addTest('MyFirstTest');
$suite->addTest('MySecondTest');
Run Code Online (Sandbox Code Playgroud)

并且将按照它们添加到套件中的顺序调用测试.Codeception另一方面,似乎是在遍历目录并运行它可以找到的每个测试.

我希望能够在两个级别上控制测试的顺序:

  1. 在不同类型的测试被调用的顺序(即我想运行unit tests之前acceptance tests)
  2. 我想控制在特定测试类型中调用的测试顺序(与PHPUnit构建套件类似)

广告.2:假设我在acceptance目录中有两个测试:

AbcCept.php
WebGuy.php
XyzCept.php
Run Code Online (Sandbox Code Playgroud)

我希望能够运行XyzCept.php之前AbcCept.php.这甚至可能吗?

并且预测挑剔的评论:是的,我知道测试应该能够以任何顺序运行,而不是彼此依赖,但这不是我要求的.

php phpunit codeception

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

phpunit -coverage-html报告路径

我试图用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.但我没有找到任何运气.

请帮帮我.

phpunit unit-testing xdebug xdebug-profiler

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

控制器单元测试在slim3

首先,我想说 - 我是用PHP(phpunit)进行单元测试的新手.在我的新项目(slim3框架)中,我想测试我的控制器,例如LoginController.

我的想法是(在单元测试方法中)

  • 创建实例 LoginController
  • 在控制器(DI)中模拟一些服务
  • 作为请求响应的执行方法(在我的控制器方法中__invoke)

我的问题是关于__invoke方法的参数.在Slim3中,可调用的请求方法有两个第一个参数:

RequestInterface $requestResponseInterface $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 slim slim-3

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

如何为文件下载创建PHP-Unit测试?

经过长时间思考这个主题没有结果,我希望有人可以给我一个关于下载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)

php phpunit unit-testing

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

Laravel测试不验证数据库约束

我有一个包含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和自动测试(而不是单独的测试数据库) - 相同的结果.

phpunit laravel laravel-5

8
推荐指数
2
解决办法
772
查看次数

Laravel 5.4上的示例PHPUnit测试失败,带有404

我可以通过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 …

php testing phpunit laravel-5 laravel-5.4

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

Laravel 5.4; 如何从Laravel包中运行单元测试?

我正在尝试开发一个Laravel编写器包并从中运行单元测试.在过去几天阅读各种过时且矛盾的指南和博客后,我对如何解决这个问题感到困惑.

这是我目前所知道的:

  • 我不应该从主要的Laravel安装中运行测试.测试应该都包含在包中.我承认这有一定的逻辑.
  • 有一种叫做Orchestra Testbench的东西.如果您正在开发Laravel包,那么显然您应该使用它.
  • 还有一种名为Laravel Dusk的东西,包含在Laravel 5.4中.

我可以让Orchestra Test Bench从给出的示例中进行一些基本测试,但我并不真正理解发生了什么,文档几乎没有解释.在测试我的应用程序的路由时,我无法获得任何工作.

我不明白Orchestra和Dusk是否可以一起玩,或者我必须在它们之间做出选择.如果是这样,我应该使用哪一个?如果它是我应该使用的Laravel Dusk,那么如何在我的包目录中运行它?

phpunit unit-testing laravel-5 laravel-dusk

8
推荐指数
2
解决办法
2150
查看次数

如何单元测试FilePostRedirectGet插件?

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)

plugins phpunit unit-testing zend-framework2

8
推荐指数
0
解决办法
170
查看次数

使用reCaptcha测试表单提交的安全和标准方法是什么?

我有很多不同形式的观点,有些形式有reCaptcha保护,有些则没有.具有reCaptcha保护的表单是关键的(注册,登录,还原等),这就是为什么它们应该被测试.

我不想做的事:

  1. 添加任何debug,test这把验证码断标志(不安全?).
  2. 在每个单元测试和部署阶段评论或取消注释reCaptcha HTML-block.

使用reCaptcha测试表单的标准方法是什么?

phpunit unit-testing recaptcha symfony

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