genesis / test-routing
一个简单的路由扩展,用于处理人类友好的页面名称,可以扩展到其他路由系统中。
1.7.1
2019-12-02 12:07 UTC
Requires
- php: ~5.5|~7.0
Requires (Dev)
- phpunit/phpunit: ~5.2
Suggests
- genesis/behat-fail-aid: Give your failures clarity and save time.
- genesis/db-backup-restore: Quickly backup and restore your database.
- genesis/sql-data-mods: Extends behat-sql-extension to provide a powerful and simple framework to manage your data modules.
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); });