模擬函數/篩選器等的回傳值,以便使用 PHPUnit 測試 WordPress。
使用 WordPress 編寫測試是一件痛苦的事情,因為非常舊的官方 WordPress 單元測試總是需要大量的自訂專案實踐,而其他測試框架則試圖模擬 WordPress 的地獄。解決方案是有一個很好的整合測試包...
總的來說,目標是簡單,不浪費時間(對我和你來說)。
下載或只是
composer install --dev pretzlaw/wp-integration-test
除了 PHP 和 WordPress 之外,我們不需要那麼多(有關更多詳細信息,請參閱 Packagist.org):
如果您從頭開始並且還沒有一些引導程序,那麼您可以像這樣使用我們的引導程序:
< phpunit bootstrap = " vendor/Pretzlaw/WPInt/bootstrap.php " >
< testsuites >
< testsuite name = " default " >
<!-- CHANGE THIS TO WHERE YOUR PHPUNIT TEST CLASSES ARE -->
< directory >lib/tests</ directory >
</ testsuite >
</ testsuites >
</ phpunit >
使用這個 bootstrap.php不是強制性的。當您還需要測試 CLI 和管理內容時,請隨意建立自訂引導檔案。
如果您已經了解 PHPUnit,那麼斷言和模擬應該不是什麼新鮮事。借助 WPInt,只需添加一項特徵即可適用於大多數 PHPUnit 測試:
class FooTest extends PHPUnit Framework TestCase {
use Pretzlaw WPInt Traits WordPressTests;
function testBar () {
// Assertions (simple or with special constraints)
static :: assertActionHasCallback ( ' init ' , ' my_own_init ' );
static :: assertShortcodeHasCallback (
[ new IsInstanceOf ( MyOwn::class ), ' some_method ' ],
' my_shortcode '
);
// Mock posts or meta-data
$ this -> mockGetPost ( 1337 )-> andReturn ( / * your wp post mock */ );
$ this -> mockPostMeta ( ' some_key ' )-> andReturn ( ' Some value! ' ); // For all posts
$ this -> mockMetaData ( ' my-own-cpt ' , ' another_key ' , 1337 )-> andReturn ( ' ec ' ); // Just for ID 1337
// Mock actions, filter, cache, ...
$ this -> mockFilter ( ' user_has_cap ' )
-> andReturn ( true );
$ this -> mockCache ()
-> shouldReceive ( ' get ' )
-> with ( ' my_own_cache ' )
-> andReturn ( ' yeah ' );
// Or use one of several shortcuts and helper
$ this -> disableWpDie ();
}
}
如您在上面看到的,我們使用的是mockery/mockery:~1,它更易於使用和維護,但使用不同的方法名稱(例如,如上所示的shouldReceive
andReturn
)。
wp_die()
請隨意要求附加功能或透過開啟問題指出更常見的快捷方式。
版權所有 2021 Pretzlaw (rmp-up.de)
特此免費授予任何獲得本軟體和相關文件文件(「軟體」)副本的人不受限制地使用本軟體,包括但不限於使用、複製、修改、合併的權利、發布、分發、再授權和/或銷售軟體的副本,並允許向其提供軟體的人員這樣做,但須滿足以下條件:
上述版權聲明和本授權聲明應包含在本軟體的所有副本或主要部分中。
本軟體以「現況」提供,不提供任何明示或暗示的保證,包括但不限於適銷性、特定用途的適用性和不侵權的保證。 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE軟體.