webnazakazku/mango-presenter-tester

v0.4 2022-03-25 21:31 UTC

This package is auto-updated.

Last update: 2024-09-26 02:56:58 UTC


README

Build Status

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)

此外,还有如 getResponsegetPresenter 之类的其他方法,用于访问原始数据并执行一些自定义检查。

监听器

您可以通过实现 Webnazakazku\MangoTester\PresenterTester\IPresenterTesterListener 接口来挂钩某些事件。然后您可以修改测试请求或执行一些隐式结果检查。

要注册一个监听器,只需将其注册为 DI 容器中的服务(如果您使用 Mango Tester Infrastructure,则为基础设施容器)。

身份工厂

使用身份工厂,您可以实现一个工厂,该工厂创建默认身份。该工厂是一个简单的 PHP 回调,它接受 PresenterTestRequest 并返回 Nette\Security\IIdentity