【问题标题】:Cakephp unit test how I will write a test method for test buildRulesCakephp 单元测试我将如何为测试 buildRules 编写测试方法
【发布时间】:2021-09-06 07:59:47
【问题描述】:

我正在尝试为以下代码编写测试用例

public function buildRules(RulesChecker $rules)
{
    $rules->add($rules->isUnique(['email']));

    return $rules;
}

我已经创建了 AdminUsersFixture 和 AdminUsersTableTest。 在 AdminUsersTableTest 我已经加载了 AdminUsersFixture。

我可以通过以下方法测试默认验证

public function testValidationDefault()
{
        $data = [
            'name' => 'lorem',
            'email' => 'jone@test.com',
            'password' => 'Lorem_ipsum',
            'status' => 1,
            'created' => date('Y-m-d H:i:s'),
            'modified' => date('Y-m-d H:i:s'),
        ];
        $adminUsers = $this->AdminUsers->newEntity($data);
        $this->assertEmpty($adminUsers->getErrors());
}

现在我将如何编写一个测试用例方法来测试 cakephp buildRules ?

【问题讨论】:

    标签: cakephp cakephp-4.x


    【解决方案1】:

    在修补/创建实体时应用验证规则,它们用于验证请求数据。保存实体时应用应用程序规则,它们用于验证数据/应用程序的完整性。

    因此您将保存一个实体(它必须没有任何验证错误,否则保存操作将在应用应用程序规则之前退出),然后检查实体上可能存在的错误。 p>

    例如:

    public function testApplicationRulesEmailsMustBeUnique()
    {
        $adminUser = $this->AdminUsers->newEmptyEntity();
        $adminUser->email = 'already@existing.email';
        
        $this->assertFalse($this->AdminUsers->save($adminUser));
        
        $this->assertSame(
            ['_isUnique' => 'This value is already in use'],
            $adminUser->getError('email')
        );
    }
    
    public function testSavingSucceeds()
    {
        $data = [
            'name' => 'lorem',
            'email' => 'jone@test.com',
            'password' => 'Lorem_ipsum',
            'status' => 1,
            'created' => date('Y-m-d H:i:s'),
            'modified' => date('Y-m-d H:i:s'),
        ];
        $adminUser = $this->AdminUsers->newEntity($data);
        
        $this->assertInstanceOf(
            \Cake\Datasource\EntityInterface::class, 
            $this->AdminUsers->save($adminUser)
        );
        $this->assertEmpty($adminUser->getErrors());
        
        // ...
    }
    

    【讨论】:

      【解决方案2】:

      您也可以使用checkRules 方法,checkRules 将返回 bool 用于创建、更新或删除。

      public function testBuildRulesEmailUnique()
      {   
              $this->assertFalse( 
                  $this->AdminUsers->checkRules(
                     $this->AdminUsers->newEntity([
                         'email' => 'jone@test.com'
                     ])
              ));
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-03
        • 2019-01-28
        • 1970-01-01
        相关资源
        最近更新 更多