【问题标题】:How to test ratio of the relation?如何测试关系的比率?
【发布时间】:2016-06-20 15:45:06
【问题描述】:

我为WorkType 类声明了workAbroads 关系,为WorkAbroad 类声明了workType 关系:

class WorkType extends \yii\db\ActiveRecord
{
    ...

    public function getWorkAbroads()
    {
        return $this->hasMany(WorkAbroad::className(), ['WorkTypeID' => 'ID']);
    }
}

class WorkAbroad extends \yii\db\ActiveRecord
{
    ...

    public function getWorkType()
    {
        return $this->hasOne(WorkType::className(), ['ID' => 'WorkTypeID']);
    }
}

我想测试关系的比率。怎么做才合适?

假设我创建了一个$workType 对象和一百个$workAbroads 对象。

我希望以下表达式将返回 $workAboards 对象的数组:

$workAboards = $workType->getWorkAbroads(); // The SQL query is always executed
// $workAboards = $workType->workAbroads; // The SQL query will be executed once

那么下面的检查就成功了:

assertEquals(100, count($workAbroads));

相反,我收到以下错误:

Failed asserting that 1 matches expected 100

我知道我可以通过查询所有符合以下条件的 ActiveRecord 对象WorkAbroad 来测试关系:

'WorkTypeID' => $workType->ID

但我想了解为什么第一种方法不起作用?

【问题讨论】:

    标签: php unit-testing activerecord yii2


    【解决方案1】:

    $workType->getWorkAbroads() 将返回一个ActiveQuery 对象,而不是WorkAbroad 对象的数组,您应该尝试一下:

    $workAboards = $workType->getWorkAbroads()->all();
    

    但如果你只是想统计相关记录,你应该使用这个:

    assertEquals(100, $workType->getWorkAbroads()->count());
    

    【讨论】:

      猜你喜欢
      • 2018-12-14
      • 1970-01-01
      • 2013-01-23
      • 2020-03-18
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多