watson / testing
该包已被废弃,不再维护。未建议替代包。
Laravel 控制器和模型测试助手。
2.0.0
2015-03-19 00:21 UTC
Requires
- php: >=5.4.0
- illuminate/database: ~5.0
- illuminate/support: ~5.0
- mockery/mockery: 0.9.*
- phpunit/phpunit: ~4.5
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 的工作,并包括了来自 SammyK、effi、mrevd 和 sorora 的未合并的拉取请求中的代码。
我决定继续这些辅助工具的开发,因为我更喜欢使用框架自带的功能进行测试,而且我真的非常喜欢PHPUnit。