mangoweb/presenter-tester

v0.3 2019-04-08 17:15 UTC

This package is auto-updated.

Last update: 2024-09-13 23:41:36 UTC


README

Build Status

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)

此外,还有像 getResponsegetPresenter 这样的方法来访问原始数据并进行一些自定义检查。

监听器

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

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

身份工厂

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