mangoweb / presenter-tester
Requires
- php: ~7.1
- nette/application: ~3.0
- nette/forms: ~3.0
- nette/security: ~3.0
- nette/tester: ~2.0
Requires (Dev)
- latte/latte: ^2.4
- mangoweb/tester-http-mocks: @dev
- mangoweb/tester-infrastructure: @dev
- nextras/secured-links: @dev
- phpstan/phpstan-shim: ^0.9.2
This package is auto-updated.
Last update: 2024-09-13 23:41:36 UTC
README
Nette 展示器测试工具,具有易于使用的 API。
安装
推荐的安装方式是通过 Composer
composer require mangoweb/presenter-tester
它需要 PHP 版本 7.1。
集成与配置
如果您在测试中使用 Nette DI 容器的功能,您可以在当前的测试环境中使用 Presenter Tester。您只需要在测试的 .neon
配置中注册 PresenterTester 服务。
services: - Mangoweb\Tester\PresenterTester\PresenterTester(baseUrl: "http://my-app.dev")
您还可以指定 监听器 列表
services: - Mangoweb\Tester\PresenterTester\PresenterTester( baseUrl: "http://my-app.dev" listeners: [ MyListener() ] )
另一种方式是将 Presenter Tester 与 mangoweb/tester-infrastructure 一起使用。在这种情况下,您必须在该基础设施 .neon
文件中注册 DI 扩展。
extensions:
mango.presenterTester: Mangoweb\Tester\PresenterTester\Bridges\Infrastructure\PresenterTesterExtension
在扩展的配置中,您可以设置基本 URL 和自定义 身份工厂。
mango.presenterTester:
baseUrl: http://my-app.dev
identityFactory: MyIdentityFactory()
使用方法
在 Mango Tester Infrastructure 环境中,服务 PresenterTester
在基础设施容器中可用。当您获取该服务时,您就可以开始测试您的展示器了
$testRequest = $presenterTester->createRequest('Admin:Article') ->withParameters([ 'action' => 'edit', 'id' => 1, ]); $testResult = $presenterTester->execute($testRequet); $testResult->assertRenders('%A%Hello world article editation%A%');
如你所见,您首先使用 PresenterTester
上的 createRequest
方法创建一个 TestPresenterRequest
。您传递一个展示器名称(不带操作)并稍后配置测试请求。您可以设置额外的请求参数,如 action
或您自己的应用程序参数。您可以在请求上配置许多其他事情,如表单值或头部。
在配置测试请求后,将其传递给 execute
方法,该方法执行展示器并返回 TestPresenterResult
,它包装 Nette\Application\IResponse
并在执行过程中收集一些额外数据。
TestPresenterResult
包含许多有用的断言函数,如渲染检查或表单有效性检查。在我们的示例中有一个 assertRenders
方法,它断言展示器返回 TextResponse
并且文本包含给定的模式。您可能已经从 Tester\Assert::match() 函数中了解了模式格式。
TestPresenterRequest API
请注意,TestPresenterRequest
是不可变对象。
withParameters(array $parameters)
设置应用程序请求参数。
withForm(string $formName, array $post, array $files)
向请求添加表单提交数据。您必须在 $formName
中指定完整的组件树路径。
Presenter Tester 支持带有 CSRF 保护的功能,但由于它使用会话,建议安装 mangoweb/tester-http-mocks 包。
withSignal(string $signal, array $componentParameters = [], string $componentClass = null)
使用 Presenter Tester,您还可以轻松测试信号方法。仅当您使用 nextras/secured-links
(您应该这样做)时,组件类才是必需的。还建议安装 mangoweb/tester-http-mocks 包。
withAjax
信号经常使用 AJAX,您可以使用此方法启用它。
withMethod(string $methodName)
更改 HTTP 方法。默认为 GET
。对于表单,您无需显式设置方法。
withHeaders(array $headers)
传递额外的 HTTP 头部。
withIdentity(Nette\Security\IIdentity $identity)
更改执行给定请求的用户身份。当需要登录才能执行操作时,这很有用。您可以实现 身份工厂,为每个请求提供默认身份。
withPost(array $post)
withFiles(array $files)
withRawBody(string $rawBody)
TestPresenterResult API
这是测试执行的结果。它包装了 Nette\Application\IResponse
并添加了一些方法以方便地检查响应。
assertRenders($match)
检查响应是否为 TextResponse
。您还可以提供 $match
参数来检查响应中是否包含某些文本。您可以传递 模式 或数组纯字符串。
assertNotRenders($matches)
检查给定的模式或字符串没有被渲染。
assertJson($expected)
检查响应是否为 JSON。您可以可选地传递预期的有效载荷。
assertBadRequest($code)
检查请求以 bad request 异常终止(例如 404 未找到)。
assertRedirects(string $presenterName, array $parameters)
检查请求是否重定向到给定的演示者。您还可以传递参数以进行检查。重定向请求中的额外参数将被忽略。
assertRedirectsUrl($url)
assertFormValid($formName)
assertFormHasErrors($formName, $formErrors)
此外,还有像 getResponse
或 getPresenter
这样的方法来访问原始数据并进行一些自定义检查。
监听器
您可以通过实现 Mangoweb\Tester\PresenterTester\IPresenterTesterListener
接口来挂钩到某些事件。然后您可以修改测试请求或执行一些隐式结果检查等。
要注册监听器,只需将其注册为 DI 容器中的服务(如果您使用 Mango 测试器基础设施,则是基础设施容器)。
身份工厂
使用身份工厂,您可以实现一个工厂,该工厂创建默认身份。该工厂是一个简单的 PHP 回调,它接受 PresenterTestRequest
并返回 Nette\Security\IIdentity
。