У меня есть модель, которая перегружает функцию where
.
Мой перегруженный метод выглядит следующим образом:
public function where($column, $operator = null, $value = null, $boolean = 'and') { if (in_array($column, $this->metaFields)) { $value = '%"' . $column . '":"' . $value . '"'; $column = 'meta'; $operator = 'like'; } return parent::where($column, $operator, $value, $boolean); }
Теперь, используя phpunit и mockingery, я пытаюсь протестировать этот класс, мне нужно проверить мою перегруженную функцию, все, что мне действительно волнует, – это то, что значения передаются в parent::where()
Мой вопрос в том, возможно ли это / как бы я высмеивал родительский класс, чтобы я мог сделать
$metaField = 'colour'; $value = 'blue'; //on the parent ->shouldReceive('where')->with(['meta', 'like', '%"colour":"blue"%'])->once(); //on the model I am testing $model->where('colour', 'blue');
все, что мне действительно интересно, это то, что значения передаются в parent :: where ()
Нет, нет. Это деталь реализации, о которой вам не нужно заботиться вообще с модульным тестированием. Просто расслабься.
Редактировать: Это не шутка, однако, если ваш дизайн требует этого, вы должны одобрить композицию над наследованием, чтобы вы могли фактически издеваться над этим «родителем» и вводить ее, поэтому проверяйте такое ожидание. По определению, родителем макета в насмешке является класс, поэтому родителем в этом случае является класс с перегруженным методом, а не его родительский. Вы не можете издеваться над «родителями» с издевательством (а не с какой-либо другой PHP-библиотекой, о которой я знаю).