watson/testing

该包已被废弃,不再维护。未建议替代包。

Laravel 控制器和模型测试助手。

2.0.0 2015-03-19 00:21 UTC

This package is auto-updated.

Last update: 2022-02-01 12:36:28 UTC


README

该包不再维护,因为 Laravel 现已提供更好的测试支持。

测试包含用于测试 Laravel 中模型和控制器特性的 traits。它可以帮助你断言模型的合法性(假设使用 watson/validating)以及模型的关联。它还允许你测试控制器的响应。

安装

只需在您的应用程序中运行以下 Composer 命令。

composer require watson/testing

~1.0 流用于 Laravel 4,而 ~2.0 流用于 Laravel 5。

概述

要使用测试助手进行测试,只需将 trait 添加到您的测试文件中。

class UsersControllerTest extends TestCase {
	use Watson\Testing\ControllerHelpers;
}
class UserTest extends TestCase {
	use Watson\Testing\ModelHelpers;
}

如果您希望全局使用测试助手,只需在您的 TestCase.php 中使用此 trait。

class TestCase extends Illuminate\Foundation\Testing\TestCase {
	use Watson\Testing\TestingTrait;
}

控制器测试

assertViewIs($expectedView, $message = null);

// Controller
return View::make('users.index');

// Test
$this->assertViewIs('users.index');

确保响应中使用的视图是您期望的视图。

模型测试

模型验证

如果您在模型上使用 watson/validating,测试验证将非常简单。以下示例将使用以下 User 模型。

$user = new User;

assertValid(Model $model, $message = null)

$user->email = 'example@example.com';

$this->assertValid($user);

assertInvalid(Model $model, $message = null)

$user->email = 'foo';

$this->assertInvalid($user);

如果您想轻松检查模型是否有效或无效,无论是否有特定属性,都有多个助手可以快速断言这一点。

assertValidWith(Model $model, $attribute, $value = null, $message = null)

$this->assertValidWith($user, 'email', 'example@example.com');

assertValidWithout(Model $model, $attribute, $message = null)

$this->assertValidWithout($user, 'last_name')

assertInvalidWith(Model $model, $attribute, $value = null, $message = null)

$this->assertInvalidWith($user, 'email', 'foo');

assertInvalidWithout(Model $model, $attribute, $message = null)

$this->assertInvalidWithout($user, 'email');

特定模型验证

如果您希望以更简单(且更易读)的方式对模型进行验证,您可能会喜欢尝试特定的模型验证。它们与 watson/validating 或任何符合 Watson\Validating\ValidatingInterface(即具有 getDefaultRules 方法)的验证特性一起工作。

assertValidatesWith(Model $mode, $attribute, $rule, $message = null)

// Assert that the email attribute is required.
$this->assertValidatesWith($user, 'email', 'required');
$this->assertValidatesRequired($user, 'email');

以下是包含的 Laravel 默认验证断言列表

  • assertValidatesAccepted(Model $model, $attribute, $message = null)
  • assertValidatesActiveUrl(Model $model, $attribute)
  • assertValidatesAfter(Model $model, $attribute, $date)
  • assertValidatesAlpha(Model $model, $attribute)
  • assertValidatesAlphaDash(Model $model, $attribute)
  • assertValidatesAlphaNum(Model $model, $attribute)
  • assertValidatesArray(Model $model, $attribute)
  • assertValidatesBefore(Model $model, $attribute, $date)
  • assertValidatesBetween(Model $model, $attribute, $min, $max)
  • assertValidatesConfirmed(Model $model, $attribute)
  • assertValidatesDate(Model $model, $attribute)
  • assertValidatesDate(Model $model, $attribute)
  • assertValidatesDifferent(Model $model, $attribute, $field)
  • assertValidatesDigits(Model $model, $attribute, $value)
  • assertValidatesDigitsBetween(Model $model, $attribute, $min, $max)
  • assertValidatesBoolean(Model $model, $attribute)
  • assertValidatesEmail(Model $model, $attribute)
  • assertValidatesExists(Model $model, $attribute, $parameters)
  • assertValidatesImage(Model $model, $attribute)
  • assertValidatesIn(Model $model, $attribute, $values)
  • assertValidatesInteger(Model $model, $attribute)
  • assertValidatesIp(Model $model, $attribute)
  • assertValidatesMax(Model $model, $attribute, $value)
  • assertValidatesMimes(Model $model, $attribute, $values)
  • assertValidatesMin(Model $model, $attribute, $value)
  • assertValidatesNotIn(Model $model, $attribute, $values)
  • assertValidatesNumeric(Model $model, $attribute)
  • assertValidatesRegex(Model $model, $attribute, $pattern)
  • assertValidatesRequired(Model $model, $attribute)
  • assertValidatesRequiredIf(Model $model, $attribute, $field, $value)
  • assertValidatesRequiredWith(Model $model, $attribute, $values)
  • assertValidatesRequiredWithAll(Model $model, $attribute, $values)
  • assertValidatesRequiredWithout(Model $model, $attribute, $values)
  • assertValidatesRequiredWithoutAll(Model $model, $attribute, $values)
  • assertValidatesSame(Model $model, $attribute, $field)
  • assertValidatesSize(Model $model, $attribute, $value)
  • assertValidatesTimezone(Model $model, $attribute)
  • assertValidatesUnique(Model $model, $attribute, $parameters)

模型关系

您可以对模型上存在的关系进行断言。

assertBelongsTo($class, $relation)

确保帖子属于用户。

$this->assertBelongsTo($post, 'user');

assertBelongsToMany($class, $relation)

确保标签属于多个帖子。

$this->assertBelongsToMany($tag, 'posts');

assertHasOne($class, $relation)

确保用户有一个个人资料。

$this->assertHasOne($user, 'profile');

assertHasMany($class, $relation)

确保用户有多个帖子。

$this->assertHasMany($user, 'posts');

致谢

该包基于现在不再维护的 way/laravel-test-helpers 的工作,并包括了来自 SammyKeffimrevdsorora 的未合并的拉取请求中的代码。

我决定继续这些辅助工具的开发,因为我更喜欢使用框架自带的功能进行测试,而且我真的非常喜欢PHPUnit。