webnazakazku / mango-presenter-tester
资助包维护!
petrparolek
Requires
- php: >=7.2
- nette/application: ~3.0
- nette/forms: ~3.0
- nette/security: ~3.0
- nette/tester: ~2.0
Requires (Dev)
- latte/latte: ^2.4
- nette/bootstrap: ~3.0.0
- nextras/secured-links: @dev
- ninjify/qa: ^0.13
- phpstan/phpstan: ^1.0
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-nette: ^1.0
- webnazakazku/mango-tester-http-mocks: ^0.4
- webnazakazku/mango-tester-infrastructure: ^0.6
This package is auto-updated.
Last update: 2024-09-26 02:56:58 UTC
README
Nette 展示器测试工具,具有易于使用的 API。
安装
推荐安装方式是通过 Composer
composer require webnazakazku/nango-presenter-tester
需要 PHP 版本 7.2。
集成与配置
如果你在测试中使用 Nette DI 容器,你可以在当前的测试环境中使用 Presenter Tester。你只需要在测试的 .neon
配置中注册 PresenterTester 服务。
services: - Webnazakazku\MangoTester\PresenterTester\PresenterTester(baseUrl: "http://my-app.dev")
你也可以指定 监听器 列表
services: - Webnazakazku\MangoTester\PresenterTester( baseUrl: "http://my-app.dev" listeners: [ MyListener() ] )
另一种方法是使用 Presenter Tester 与 webnazakazku/mango-tester-infrastructure 一起。在这种情况下,你必须在基础设施 .neon
文件中注册 DI 扩展。
extensions:
mango.presenterTester: Webnazakazku\MangoTester\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
中指定完整的组件树路径。
展示器测试器支持具有 CSRF 保护的形式,但由于它使用会话,建议安装 webnazakazku/mango-tester-http-mocks 包。
withSignal(string $signal, array $componentParameters = [], string $componentClass = null)
使用展示器测试器,你还可以轻松测试信号方法。只有在你使用 nextras/secured-links
(你应该这样做)的情况下,组件类才是必需的。还建议安装 webnazakazku/mango-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)
检查请求是否以不良请求异常(例如 404 未找到)终止。
assertRedirects(string $presenterName, array $parameters)
检查请求是否重定向到给定的演示者。您还可以传递参数进行检查。重定向请求中的额外参数将被忽略。
assertRedirectsUrl($url)
assertFormValid($formName)
assertFormHasErrors($formName, $formErrors)
此外,还有如 getResponse
或 getPresenter
之类的其他方法,用于访问原始数据并执行一些自定义检查。
监听器
您可以通过实现 Webnazakazku\MangoTester\PresenterTester\IPresenterTesterListener
接口来挂钩某些事件。然后您可以修改测试请求或执行一些隐式结果检查。
要注册一个监听器,只需将其注册为 DI 容器中的服务(如果您使用 Mango Tester Infrastructure,则为基础设施容器)。
身份工厂
使用身份工厂,您可以实现一个工厂,该工厂创建默认身份。该工厂是一个简单的 PHP 回调,它接受 PresenterTestRequest
并返回 Nette\Security\IIdentity
。