ฉันจะหาเอกสารสำหรับคลาสโรงงาน WP_UnitTestCase ได้ที่ไหน


21

ในรุ่นล่าสุดWP_UnitTestCaseได้รวม$factoryคุณสมบัติ

ตัวอย่างเช่น:

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

ฉันจะหาเอกสารเกี่ยวกับคุณสมบัติที่มีประโยชน์นี้ได้ที่ไหน

คำตอบ:


26

เท่าที่ฉันรู้ไม่มีเอกสารสำหรับมันในปัจจุบัน แหล่งที่มาอย่างเป็นทางการอยู่ที่นี่

ฉันยังได้เขียนบทช่วยสอนเกี่ยวกับการทดสอบหน่วยปลั๊กอิน WordPress ซึ่งให้รายละเอียดเกี่ยวกับคุณลักษณะนี้

ข้อดีอย่างหนึ่งของการใช้WP_UnitTestCaseคือโรงงาน สิ่งเหล่านี้สามารถเข้าถึงได้ผ่านfactoryตัวแปรสมาชิก factoryเป็นวัตถุที่มีคุณสมบัติที่มีในแต่ละตัวอย่างของหนึ่งในชั้นเรียนที่กำหนดไว้ในincludes / 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 ) );

นอกจากนี้หากคุณต้องการมากกว่า 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 มิถุนายน 2558):คุณสามารถสร้างโรงงานของคุณเอง !

อัปเดต (27 กันยายน 2559):ใน WordPress 4.4 การทดสอบได้รับการอัปเดตเพื่อให้factory()วิธีการแบบคงที่สำหรับการเข้าถึงโรงงานแม้ว่าfactoryคุณสมบัติจะยังคงให้ผ่านทางผู้บุกรุกเวทมนตร์


โดเมนนั้นตายแล้วและเป็นลิงก์ไปยังบทช่วยสอน มันถูกย้ายไปแล้ว?
Josh Habdas

@JoshH ดูเหมือนว่าจะได้รับการสำรองข้อมูลในขณะนี้ คุณอาจโดนมันในขณะที่ไซต์กำลังสำรองข้อมูลในตอนกลางคืน (เขตเวลาของฉัน)
JD

@JoshH ฉันไม่ทราบว่ากรอบการทดสอบหน่วยใดที่ใช้รหัสขั้นตอนสำหรับการทดสอบ ฉันสงสัยจริงๆว่ากรอบการทดสอบตามขั้นตอนจะใช้ได้เกือบจะเหมือนกันกับ OO เพียงใดเพราะมันจำเป็นต้องใช้งานอย่างไร อย่างไรก็ตามเนื่องจากการทดสอบถูกสร้างขึ้นบนกรอบงานเชิงวัตถุเช่น PHPUnit ไม่ได้กำหนดว่าพวกเขาสามารถทดสอบรหัส OO เท่านั้น ฉันมีโค้ดขั้นตอนมากมายปลั๊กอินของฉันและทดสอบในลักษณะเดียวกัน WordPress ยังทดสอบโค้ดขั้นตอนจำนวนมากด้วยวิธีนี้ ดังนั้นจึงไม่มีปัญหา
JD

ขอบคุณ @JD ฉันชอบที่จะเขียนแบบทดสอบในลักษณะนี้เช่นกัน แต่ฉันจะส่งให้ OOP เพราะมันไม่ได้อยู่ในรหัสหลัก PS ฉันลองส่งความคิดเห็นในบล็อกของคุณและได้รับข้อผิดพลาด ใบหน้าที่ไม่สุภาพขอบคุณสำหรับ 411.
Josh Habdas

1
@JoshH ขอบคุณสำหรับหัวขึ้นเกี่ยวกับปัญหาที่มีความคิดเห็นนี้ควรได้รับการแก้ไขในขณะนี้ มันเกิดจากปลั๊กอินต่อต้านสแปมสุดยอด
JD

2

รหัสแหล่งที่มา

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

ดูเหมือนจะเป็นสถานที่ที่ดีที่สุดในการดูช่วงเวลา


2
เพียงลบลิงก์ออกจากคำถามของคุณ: คุณจะอ่านอะไรดี โปรดเขียนคำตอบที่ไม่พึ่งพาแหล่งภายนอกเสมอ มิฉะนั้นเราจะต้องลบคำตอบของคุณ
kaiser

2
@kaiser ฉันเห็นว่าคุณมาจากไหน แต่คำตอบสำหรับคำถามของฉันจะเป็นลิงก์ แน่นอนคุณไม่คาดหวังว่าจะมีคนโพสต์เอกสารทั้งหมดที่นี่?
djb

2
ใช่เราคาดว่าจะมีคนโพสต์รหัสที่เกี่ยวข้องทั้งหมดที่นี่ สิ่งนี้ถูกเขียนลงในคำถามที่พบบ่อยของเว็บไซต์ - "อ้างอิงส่วนที่เกี่ยวข้องที่สุดของลิงก์สำคัญเสมอในกรณีที่ไซต์เป้าหมายไม่สามารถเข้าถึงหรือออฟไลน์อย่างถาวร" นั่นอาจไม่ใช่เนื้อหาทั้งหมดของทรัพยากรที่เชื่อมโยง แต่ในกรณีนี้อาจเป็น ตามที่เป็นเมื่อทรัพยากร GitHub นั้นไม่สามารถเข้าถึงได้คำตอบนี้จะไร้ความหมาย
s_ha_dum
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.