如何对管理仪表板进行单元测试

时间:2016-12-19 作者:Mte90

我正在尝试使用wp browser对基于样板的wordpress插件的codeception进行单元测试。

这里面的问题line of code 我仅在不是AJAX请求且is_admin().

所以我有一个问题,我做了测试,但在管理界面中时没有执行。我有强制成为管理员的代码,在管理员界面中:

wp_set_current_user( 1 );
set_current_screen( \'edit.php\' );
但显然在测试之前没有运行(我把它放在setUp) 所以我认为测试(类)中的方法是稍后执行的(我猜),但插件是在之前初始化的。

我的想法是在使用这两行代码进行所有单元测试之前,先在wordpress中加载一个插件,但我认为这只是一种攻击。

你有什么建议吗?

1 个回复
最合适的回答,由SO网友:J.D. 整理而成

基本上有三种选择:

动态加载带有管理端代码的文件setUp()setUpBeforeClass(), 因此,当这些测试运行时,它将被加载bootstrap.php 文件或其他文件,因此将为所有测试加载它is_admin(), 还有一些没有。(或者,始终像这样运行测试is_admin(), 与您使用插件的建议类似。)setUpBeforeClass().

#1和#2的唯一缺点是,它们绕过了插件的逻辑,而插件的逻辑通常决定何时加载此代码。因此,在测试中,您测试的是该文件中的代码,但您没有测试插件是否正确加载了该文件。

如果我们讨论的是单元测试,这是可以的。单元测试是关于测试代码的各个单元,比如该文件中包含的每个函数的每个不同方面。它们并不是要确保你的插件作为一个整体正常运行。由于您使用的是Codeception,因此除了单元测试之外,还可以运行功能测试和验收测试。在功能和验收测试中,您将测试插件作为一个整体是否正常运行,其中包括(间接)测试管理端代码是否加载到管理中。

所以,我只需将文件加载到setUpBeforeClass() 或在中bootstrap.php 诸如此类,在我的单元测试中不用担心这一点。在验收测试中,当您通过浏览器测试插件在WordPress仪表板中的实际操作方式时,您将测试是否在应该加载的时候加载了管理端代码。

也许可以为单元测试执行#3,但基本上您的验收测试已经在这样做了:当您让浏览器访问管理员中插件的UI进行测试时,如果管理员端代码没有在应该加载的时候加载,您的测试将失败。

相关推荐