Tôi có thể tìm tài liệu cho các lớp nhà máy WP_UnitTestCase ở đâu?


21

Trong các phiên bản gần đây WP_UnitTestCaseđã bao gồm một $factorytài sản.

Ví dụ:

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

Tôi có thể tìm tài liệu về tính năng hữu ích này ở đâu?

Câu trả lời:


26

Theo tôi biết, hiện tại không có tài liệu nào cho nó. Nguồn chính thức là đây .

Tôi cũng đã viết một hướng dẫn về đơn vị thử nghiệm các plugin WordPress, cung cấp một số chi tiết về tính năng này .

Một trong những lợi thế của việc sử dụng WP_UnitTestCaselà các nhà máy của nó. Đây có thể được truy cập thông qua các factorybiến thành viên. Đây factorylà một đối tượng với các thuộc tính là mỗi thể hiện của một trong các lớp được định nghĩa trong gồm / Factory.php . Họ làm gì, bạn hỏi? Họ làm cho nó rất đơn giản để tạo người dùng, bài đăng, điều khoản, vv, bất cứ nơi nào bạn cần họ trong thử nghiệm của bạn. Vì vậy, thay vì làm điều này:

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

Bạn chỉ có thể làm điều này:

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

Nhưng chờ đã, nó thậm chí còn trở nên tốt hơn. Điều gì nếu bạn cần nhiều người dùng (hoặc bài viết, hoặc bất cứ điều gì)? Bạn chỉ có thể tạo chúng với số lượng lớn như thế này:

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

Điều đó sẽ tạo ra 25 người dùng mà bạn có thể sử dụng trong thử nghiệm của mình.

factorycác thuộc tính sau mà bạn có thể sử dụng:

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

Tất cả chúng có thể được sử dụng theo cách tương tự như thể hiện trong ví dụ trên với $usernhà máy. Ví dụ: bạn có thể tạo một bài đăng như thế này:

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

Bạn cũng có thể chỉ định các đối số cụ thể để sử dụng để tạo đối tượng. Trong ví dụ trên, chúng tôi đã tạo một bài đăng, nhưng nó không được gán cho một người dùng cụ thể ( post_authortrường sẽ mặc định 0). Đôi khi chúng tôi có thể muốn bài đăng được gán cho người dùng thay thế. Chúng tôi sẽ làm như thế này:

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

Ngoài ra, nếu bạn cần nhiều hơn chỉ ID của đối tượng bạn đang tạo, bạn không cần phải làm điều này:

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

Thay vào đó, sử dụng create_and_get()phương pháp:

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

Trong ví dụ này, chúng tôi đã sử dụng postnhà máy, nhưng điều tương tự cũng đúng với tất cả các nhà máy.

Tôi nghĩ rằng tôi sẽ đề cập điều này với nhóm tài liệu WordPress. Có lẽ chúng ta có thể đưa những thứ này vào sổ tay plugin và chủ đề.

Cập nhật (ngày 20 tháng 6 năm 2015): Bạn cũng có thể tạo các nhà máy tùy chỉnh của riêng mình !

Cập nhật (ngày 27 tháng 9 năm 2016): Trong WordPress 4.4, các thử nghiệm đã được cập nhật để cung cấp factory()phương thức tĩnh để truy cập vào các nhà máy, mặc dù factorytài sản vẫn được cung cấp thông qua một công cụ ma thuật.


Tên miền đã chết và liên kết đến hướng dẫn cũng vậy. Nó đã được di chuyển?
Josh Habdas

@JoshH Nó dường như được sao lưu ngay bây giờ. Bạn có thể nhấn nó trong khi trang web đang chạy một bản sao lưu vào giữa đêm (múi giờ của tôi).
JD

@JoshH Tôi không biết bất kỳ khung thử nghiệm đơn vị nào sử dụng mã thủ tục cho các thử nghiệm. Tôi thực sự nghi ngờ rằng một khung kiểm tra thủ tục sẽ hoạt động gần như một OO dù sao, chỉ vì cách nó cần để hoạt động. Tuy nhiên, chỉ vì các thử nghiệm được xây dựng trên một khung công tác hướng đối tượng như PHPUnit không ra lệnh rằng chúng chỉ có thể kiểm tra mã OO. Tôi có rất nhiều mã thủ tục các plugin của mình và kiểm tra nó theo cùng một cách. WordPress cũng kiểm tra rất nhiều mã thủ tục theo cách này. Vì vậy, nó sẽ không có vấn đề.
JD

Cảm ơn @JD tôi cũng lý tưởng muốn viết bài kiểm tra của mình theo cách này. Nhưng tôi sẽ nộp cho OOP vì nó không nằm trong bộ luật chính. PS Tôi đã thử gửi bình luận trên blog của bạn và nhận được một lỗi. Khuôn mặt nheo mắt Bất kể, cảm ơn vì 411.
Josh Habdas

1
@JoshH Cảm ơn bạn đã đề cập đến vấn đề với các bình luận, điều này cần được khắc phục ngay bây giờ. Nó được gây ra bởi một plugin chống thư rác quá mức.
JD

2

Mã nguồn tại

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

dường như là nơi tốt nhất để nhìn vào thời điểm này


2
Chỉ cần xóa liên kết khỏi câu hỏi của bạn: Bạn sẽ đọc gì hơn? Hãy luôn viết câu trả lời mà dont dựa vào các nguồn bên ngoài. Khác chúng tôi sẽ cần phải xóa câu trả lời của bạn.
kaiser

2
@kaiser, tôi thấy bạn đến từ đâu, nhưng câu trả lời cho câu hỏi của tôi sẽ là một liên kết. Chắc chắn bạn sẽ không mong đợi ai đó đăng toàn bộ tài liệu ở đây?
djb

2
Có, chúng tôi hy vọng ai đó sẽ đăng tất cả cáccó liên quan ở đây. Điều này thậm chí còn được viết vào trang web Câu hỏi thường gặp - "Luôn trích dẫn phần có liên quan nhất của một liên kết quan trọng, trong trường hợp trang đích không thể truy cập được hoặc ngoại tuyến vĩnh viễn." Đó có thể không phải là toàn bộ nội dung của tài nguyên được liên kết nhưng trong trường hợp này có thể là như vậy. Như là, khi tài nguyên GitHub đó không thể truy cập được, câu trả lời này trở nên vô nghĩa.
s_ha_dum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.