uzulla/mockslimclient

用于 Slim 框架 Mock 的网络爬虫。 (用于单元测试)

v2.0.0 2019-10-07 04:27 UTC

This package is auto-updated.

Last update: 2024-09-25 23:24:10 UTC


README

Mock Slim 的客户端。 (用于 PHPUnit)

Slim 框架中已有 Mock,但进行 POST 模拟等操作需要相对复杂的步骤。这使得它不太适合自动化测试,因此我优化了访问模拟。

使用 req() 可以获取 html,使用 req_dom() 可以获取 php-html-parser 实例,这样您就可以在不额外解析的情况下方便地进行验证。

请参考 example 和示例代码来了解实际用法。

注意

由于 Slim 的 Mock 最初并没有特别考虑这种用途,尤其是 POST 时的数据处理稍微有些复杂,但已经尽力让它表现得尽可能自然。

因此,未来 Slim 的设计变更可能会影响其功能。如果出现这种情况,请通过 ISSUE 等方式报告。

安装

使用 Composer

{
    "require": {
        "uzulla/mockslimclient": "dev-master"
    }
}

示例

在 PHPUnit 测试中

<?php
class myTest extends \PHPUnit\Framework\TestCase
{
    use \Uzulla\MockSlimClient; // use by trait

    // over ride \Uzulla\MockSlimClient::registrationRoute()
    static function registrationRoute($app)
    {
        $app->get('/', function() use ($app){
            //...
        });
        // or \myApp::registrationRoute($app);
    }
    
    // over ride \Uzulla\MockSlimClient::createSlim()
    static function createSlim()
    {
        return new \Slim\Slim([
            'templates.path' => __DIR__.'/../../sample_app/templates'
        ]);
    }    

    // sample test case.	
    public function testConfirmPost()
    {
        // get http://dummy/ html.
        $raw_html = $this->req('/');
        
        // get paquettg/php-html-parser instance
        $dom = $this->req_dom('/post/form');
        $this->assertTrue(!!$dom->find('input[name=name]'));

        // get CSRF token.
        $this->req('/');
        $csrf_token = $_SESSION['csrf_token'];

        $test_name = 'testname';
        $test_body = 'testbody';

        // build post data.
        $input = http_build_query([
            'nickname'=>$test_name,
            'body'=>$test_body,
            'csrf_token'=>$csrf_token
        ]);

        // do post.
        $dom = $this->req_dom('/post/confirm', 'POST', $input);
        $this->assertEquals($test_name, $dom->find('div.nickname-preview', 0)->text);
        $this->assertEquals($test_name, $dom->find('input[name=nickname]', 0)->value);
    }
}

使用示例代码

检查示例 webapp。

$ cd sample_app
$ php -S localhost:5000

打开 https://:5000/

执行示例 PHPUnit 测试

$ cd sample_test
$ php ../vendor/bin/phpunit 
PHPUnit 3.7.28 by Sebastian Bergmann.

Configuration read from /Users/uzulla/dev/mock_slim_client/sample_test/phpunit.xml

..

Time: 91 ms, Memory: 4.50Mb

OK (2 tests, 2 assertions)

许可证

MIT

另请参阅