genesis/test-routing

一个简单的路由扩展,用于处理人类友好的页面名称,可以扩展到其他路由系统中。

安装量2,241

依赖项: 0

建议者: 5

安全: 0

星标: 1

关注者: 2

分支: 0

开放问题: 1

类型:behat-extension

1.7.1 2019-12-02 12:07 UTC

README

简单路由,使用命名页面而不是URL。

FeatureContext 步定义

  • 假设我在 :page 页面
  • 假设我在 :page 页面上的 :device
  • 假设我在具有以下参数的 :page 页面
  • 然后我应该处于 :arg1 页面

Genesis\TestRouting\RoutingContxt 类中的特性

  • ::getRoute() 接受一个回调函数,允许在返回最终URL之前操作URL。
  • ::setAllRoutesFromExternalSource() 为现有路由机制提供桥梁。您可以重用现有的应用程序路由配置。
  • ::registerFile() 注册一个包含所有路由定义的外部文件。此调用通常包含在您的上下文构造函数文件之一中。

RouteAssert 类中的特性

  • ::page() 断言页面是否正确解析到URL。
  • ::uri() 断言您处于正确的URI。
  • ::queryParams() 断言URL持有正确的查询参数。

发布详情

主要版本:发布第一个版本的路由测试。次要版本:添加断言库。新的构建URL的调用。修复:如果没有定义重写方法,则可调用方法会中断。

default:
  formatters:
        pretty: true
  suites:
    default:
      contexts:
        - RoutingContext:
            routesFilePath: ./features/bootstrap/Routing.php # relative path.
            windowSizeDevice: desktop # set to default resolution for device on visit.
            windowSizeRes: 1280x1024 # set to custom resolution on visit.

routesFilePath 应该是一个包含路由数组的PHP文件,如下所示

return [
    'home page' => '/home',
    'about us' => '/about-us'
];

您将使用分配给路由的名称,在特性文件中使用提供的步骤定义来引用它们。

PHP - 添加路由

use Genesis\TestRouting\Routing;

Routing::addRoute('home page', '/home');

获取路由

use Genesis\TestRouting\Routing;

$route = Routing::getRoute('home page');

Output: /home

注册包含所有路由的文件。

use Genesis\TestRouting\Routing;

Routing::registerFile('/my-routes.php');

更高级的get形式

use Genesis\TestRouting\Routing;

$route = Routing::getRoute('home page', function ($url) {
    return $url . '?testing=1';
});

Output: /home?testing=1

重用您的应用程序路由配置

use Genesis\TestRouting\Routing;
use MyApp\Routing\AppRouter;

$router = new AppRouter($routes);
// As long as it is an iterable, it will do.
$routes = $router->getAll();

Routing::setAllRoutesFromExternalSource($routes, function ($route, $index) {
    // $route contains individual elements contained within routes. Just return the name and the url.
    return [$route->getName() => $route->getUrl()];
});

Note: You can bypass the above by using the file data directly most of the time.

与behat-sql-extension集成

有两种方法可以做到这一点,要么使用下面的方法,要么扩展RoutingContext文件以仅提供回调,同时保留所有其他功能

方法1

<?php

use Genesis\SQLExtensionWrapper\BaseProvider;
use Genesis\TestRouting\RoutingContext as Routing;

/**
 * RoutingContext class.
 */
class RoutingContext extends Routing
{
    /**
     * @Override The bit that will replace ids n stuff within our routes.
     *
     * @return callable
     */
    protected function getCallable(): callable
    {
        $sqlApi = BaseProvider::getApi();

        return function ($url) use ($sqlApi) {
            return $sqlApi->get('keyStore')->parseKeywordsInString($url);
        };
    }
}

然后在behat.yml中注册上述RoutingContext,而不是扩展提供的RoutingContext。

方法2

use Genesis\TestRouting\Routing;

$url = Routing::getRoute($pageName, function ($url) use ($sqlApi) {
    // Parse out any database keywords with their values from the keystore for dynamic URLs.
    return $sqlApi->get('keyStore')->parseKeywordsInString($url);
});