Cakephp 3-单元测试验证默认

markvdlaan93

我目前正在尝试为以下模型编写单元测试:

<?php
namespace App\Model\Table;

use App\Model\Entity\User;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

/**
 * Users Model
 *
 * @property \Cake\ORM\Association\HasMany $Comments
 * @property \Cake\ORM\Association\BelongsToMany $Albums
 */
 class UsersTable extends Table
 {

    /**
     * Initialize method
     *
     * @param array $config The configuration for the Table.
     * @return void
     */
     public function initialize(array $config)
     {
       parent::initialize($config);

       $this->table('users');
       $this->displayField('id');
       $this->primaryKey('id');

       $this->addBehavior('Timestamp');

       $this->hasMany('Comments', [
           'foreignKey' => 'user_id'
       ]);
       $this->belongsToMany('Albums', [
          'foreignKey' => 'user_id',
          'targetForeignKey' => 'album_id',
          'joinTable' => 'users_albums'
       ]);
      }

/**
 * @Author: Mark van der Laan
 * @Date: 23-02-2016
 * @Description: Validating rules for the user model. Some additional, more complex validation rules are added.
 * @param \Cake\Validation\Validator $validator Validator instance.
 * @return \Cake\Validation\Validator
 */
public function validationDefault(Validator $validator)
{
    // id
    $validator
        ->integer('id')
        ->allowEmpty('id', 'create');

    // username
    $validator
        ->requirePresence('username', 'create')
        ->notEmpty('username')
        // Enabled, just in case that the username will be an email address
        ->email('username')
        ->add('username', [
            'length' => [
                'rule' => ['minLength', 7],
                'message' => 'Username needs to be at least 7 characters long!',
            ]
        ]);

    // password
    $validator
        ->requirePresence('password', 'create')
        ->notEmpty('password')
        ->add('password', [
            'length' => [
                'rule' => ['minLength', 7],
                'message' => 'Password needs to be at least 7 characters long!',
            ]
        ]);

    // sign_in_count
    $validator
        ->integer('sign_in_count')
        ->requirePresence('sign_in_count', 'create')
        ->notEmpty('sign_in_count');

    // ip address
    $validator
        ->allowEmpty('current_sign_in_ip')
        ->requirePresence('current_sign_in_ip', 'create')
        // Currently checking for both IPv4 and IPv6 addresses
        ->ip('current_sign_in_ip', 'both');

    // active
    $validator
        ->boolean('active')
        ->requirePresence('active', 'create')
        ->allowEmpty('active');

    return $validator;
}

/**
 * Returns a rules checker object that will be used for validating
 * application integrity.
 *
 * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
 * @return \Cake\ORM\RulesChecker
 */
public function buildRules(RulesChecker $rules)
{
    $rules->add($rules->isUnique(['username']));
    return $rules;
}
}

对我来说,测试我尝试使用以下代码段进行的validationDefault方法很重要:

public function testValidationDefault()
{
    $data = ['username' => '[email protected]',
             'password' => 'testtest123',
             'sign_in_count' => 0,
             'current_sign_in_ip' => '127.0.0.1',
             'active' => 'true'
            ];
    $this->assertTrue($this->Users->save($data));
    // $this->assertTrue($data);
}

当我尝试执行此操作时,这将引发错误,表明我不应该将数组传递给assertTrue方法。因此,我正在尝试查找示例,但找不到任何内容。有人在哪里可以找到如何对验证规则进行单元测试的参考?(到目前为止,我在文档中找不到任何内容)

更新

public function testValidationDefault()
{
    $data = ['username' => '[email protected]',
             'password' => 'testtest123',
             'sign_in_count' => 0,
             'current_sign_in_ip' => '127.0.0.1',
             'active' => true
            ];
    $user = $this->Users->newEntity($data);
    $saved = $this->Users->save($user);
    $this->assertTrue($saved);
    // $this->assertTrue($data);
}

这将给出“无法断言App \ Model \ Entity \ User Object&0000000011b3c53b0000000040aca14b为真”。有人知道我在做什么错吗?

ndm

看看Table::save()返回的是\Cake\Datasource\EntityInterface|bool成功则返回持久实体,失败则返回boolean false因此,您的保存操作成功,它将返回一个实体,因此会出现错误。

如果要测试验证,则应该使用表类提供的验证器对象(Table::validationDefault()通过Table::validator()),或者使用Table::patchEntity()Table::newEntity()并测试的值Entity:errors()

修补/创建实体是在模型层进行验证的地方,保存过程将仅应用应用程序规则。

public function testValidationDefault()
{
    $data = [
        'username' => '[email protected]',
        'password' => 'testtest123',
        'sign_in_count' => 0,
        'current_sign_in_ip' => '127.0.0.1',
        'active' => true
    ];
    $user = $this->Users->newEntity($data);
    $this->assertEmpty($user->errors()); // empty = no validation errors
}

也可以看看

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Cakephp 3-单元测试验证默认

来自分类Dev

提高 CakePHP 3 单元测试性能

来自分类Dev

CakePHP 3:设置单元测试的当前时间

来自分类Dev

如何对需要HTTP基本身份验证的CakePHP 3.x Controller Action进行单元测试?

来自分类Dev

Cakephp 3-在控制器单元测试期间未加载行为

来自分类Dev

CakePHP 3属于ToMany验证

来自分类Dev

cakephp 3添加条件验证

来自分类Dev

cakephp 3添加条件验证

来自分类Dev

无法验证表单CakePHP 3

来自分类Dev

设置CakePHP 3插件测试

来自分类Dev

单元测试验证器约束

来自分类Dev

如何加快CakePHP的单元测试

来自分类Dev

如何加快CakePHP的单元测试

来自分类Dev

cakephp 3.x默认身份验证无效

来自分类Dev

ZF3单元测试身份验证onBootstrap

来自分类Dev

CakePHP 3合并或合并验证器

来自分类Dev

Cakephp 3电子邮件验证

来自分类Dev

CakePHP 3-创建新的验证器

来自分类Dev

CakePHP 3-多重身份验证

来自分类Dev

模拟身份验证cakephp 3

来自分类Dev

CakePHP 3合并或合并验证器

来自分类Dev

CakePHP 3-更改密码的验证无效

来自分类Dev

CakePHP 3-多重身份验证

来自分类Dev

Cakephp 3图片上传-验证无效

来自分类Dev

Cakephp 3电子邮件验证

来自分类Dev

CakePHP 3 在模板中显示验证错误

来自分类Dev

CakePHP 3.x - 双重关联验证

来自分类Dev

cakephp 3 相关模型数据的表单验证

来自分类Dev

通过MediatR PipelineBehavior进行单元测试验证