Де я можу знайти документацію для заводських класів WP_UnitTestCase?


21

В останніх версіях WP_UnitTestCaseвключено $factoryвластивість.

Наприклад:

$post = $this->factory->post->create();

Де я можу знайти документацію про цю корисну функцію?

Відповіді:


26

Наскільки мені відомо, наразі документації на це немає. Офіційне джерело тут .

Я також написав навчальний посібник з тестування модулів WordPress, де ви знайдете детальну інформацію про цю функцію .

Однією з переваг використання WP_UnitTestCaseє його фабрики. До них можна отримати доступ через factoryзмінну члена. Це factoryоб'єкт із властивостями, кожен з яких є екземпляром одного з класів, визначених у include / factory.php . Що вони роблять, запитаєте ви? Вони дуже просто створюють користувачів, дописи, терміни тощо, де вони вам потрібні у вашому тесті. Отже, замість цього:

$args = array( /* A bunch of user data you had to make up */ );
wp_insert_user( $args );

Ви можете просто зробити це:

$user_id = $this->factory->user->create();

Але зачекайте, стає ще краще. Що робити, якщо вам потрібно багато користувачів (або публікації чи що завгодно)? Ви можете просто створити їх оптом так:

$user_ids = $this->factory->user->create_many( 25 );

Це створить 25 користувачів, яких ви можете використовувати у своєму тесті.

У factoryнаступних властивостях ви можете використовувати:

  • $post
  • $attachment
  • $comment
  • $user
  • $term
  • $category
  • $tag
  • $blog

Усі вони можуть використовуватися тим самим способом, як показано у наведеному вище прикладі на $userзаводі. Наприклад, ви можете створити публікацію так:

$this->factory->post->create();

Ви також можете вказати конкретні аргументи, які потрібно використовувати для створення об’єкта. У наведеному вище прикладі ми створили публікацію, але вона не була призначена конкретному користувачеві ( post_authorполе буде за замовчуванням 0). Іноді ми можемо бажати, щоб посада була призначена користувачеві. Ми зробимо це так:

$user_id = $this->factory->user->create();
$post_id = $this->factory->post->create( array( 'post_author' => $user_id ) );

Крім того, якщо вам потрібно більше, ніж просто ідентифікатор об'єкта, який ви створюєте, вам цього не потрібно:

$post_id = $this->factory->post->create();
$post = get_post( $post_id );

Замість цього використовуйте create_and_get()метод:

// $post will be an instance of WP_Post 
$post = $this->factory->post->create_and_get();

У цьому прикладі ми використовували postзавод, але те саме стосується всіх заводів.

Думаю, я згадаю про це команді документів із WordPress. Можливо, ми можемо потрапити до цих матеріалів у підручники із плагінами та темами.

Оновлення (20 червня 2015 р.): Ви також можете створити власні власні фабрики !

Оновлення (27 вересня 2016 р.): У WordPress 4.4 тести були оновлені, щоб забезпечити статичний factory()метод доступу до заводів, хоча factoryвластивість все ще надається за допомогою магічного геттера.


Домен мертвий, як і посилання на підручник. Це було переміщено?
Джош Хабдас

@JoshH Схоже, це зараз резервне копіювання. Ви, мабуть, потрапили на нього, поки сайт працював із резервною копією посеред ночі (мій часовий пояс).
JD

@JoshH Я не знаю жодної структури тестування одиниць, яка використовує процедурний код для тестів. Я справді сумніваюся, що рамки процедурного тестування в будь-якому разі будуть працювати так само добре, як і OO, саме тому, як це потрібно працювати. Однак, лише тому, що тести побудовані на об'єктно-орієнтованій основі, як PHPUnit, не диктує, що вони можуть перевірити лише код OO. У мене є багато процедурного коду моїх плагінів і тестую його точно так само. WordPress також перевіряє багато процедурного коду таким чином. Тож це не повинно бути жодних проблем.
JD

Дякую @JD Я також хотів би написати свої тести таким чином. Але я підпорядкуюсь OOP, якщо це не в основному кодовому рядку. PS Я спробував надіслати коментар до вашого блогу і отримав помилку. косооке обличчя Незалежно, дякую за 411.
Джош Хабдас

1
@JoshH Дякую за голову щодо питання з коментарями, це слід виправити зараз. Це було викликано надмірним плагіном проти спаму.
JD

2

Вихідний код у

https://github.com/rnagle/wordpress-unit-tests/blob/master/includes/factory.php

здається, найкраще місце для того, щоб подивитися на даний момент


2
Просто видаліть посилання зі свого питання: Що б ви прочитали? Будь ласка, завжди пишіть відповіді, які не покладаються на сторонні джерела. Ще потрібно буде видалити вашу відповідь.
кайзер

2
@kaiser, я бачу, звідки ти родом, але відповідь на моє запитання буде посиланням. Невже ви не очікували, що хтось опублікує всю цю документацію тут?
djb

2
Так, ми очікуємо, що хтось опублікує тут весь відповідний код. Про це навіть написано в FAQ на сайті - "Завжди цитуйте найбільш релевантну частину важливого посилання, якщо націлений сайт недоступний або виходить постійно в офлайн". Це може бути не весь вміст пов'язаного ресурсу, але в цьому випадку він може бути. Коли це ресурс GitHub стає недоступним, ця відповідь стає безглуздою.
s_ha_dum
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.