如何检查 Wordpress 插件是否在 Codeception 验收测试中激活
How to check a Wordpress plugin is activated in a Codeception acceptance test
我正在学习如何在 Wordpress 中编写插件,我想测试插件在激活时的行为。我正在使用 Codeception/Wp-Browser 作为 TDD 框架。我打算使用模块 WpWebDriver 和 Chrome.
编写一个 验收测试
问题是我写的测试互相干扰。因此,我需要在每次测试前重置插件的状态,但我不知道该怎么做。
在每次测试之前我需要:
- 测试插件是否激活
- 如果是,则停用
- 如果不是,则什么都不做
我知道我可以在 Cest class 中使用 _before
方法。这是我的代码:
<?php
class activationCest
{
public function _before(AcceptanceTester $I)
{
// what to do here???
}
public function _after(AcceptanceTester $I)
{
}
// tests
public function activationCaseFailPHP(AcceptanceTester $I)
{
$I->wantTo('see an error message if the PHP version
is not compatible with the plugin');
$I->loginAsAdmin();
$I->amOnPluginsPage();
$I->activatePlugin('testwidget');
$I->see('Your PHP version is outdated.
Testwidget requires a PHP version equal or superior
to 7.0. Contact your hosting provider about
how to update PHP');
}
public function activationCaseFailWP(AcceptanceTester $I)
{
$I->wantTo('see an error message if the Wordpress version
is not compatible with the plugin');
$I->loginAsAdmin();
$I->amOnPluginsPage();
$I->activatePlugin('testwidget');
$I->see('Your Wordpress version is outdated.
Testwidget requires a Wordpress version equal
or superior to 5.0. Contact your hosting provider
about how to update Wordpress');
}
public function activationCaseSuccess(AcceptanceTester $I)
{
$I->wantTo('see a success message if the PHP and Wordpress versions are
compatible with the plugin');
$I->loginAsAdmin();
$I->amOnPluginsPage();
$I->activatePlugin('testwidget');
$I->see('Selected plugins activated', '#message');
}
}
我天真地试过了
public function _before(AcceptanceTester $I)
{
if (is_plugin_active('testwidget')) {
$I->deactivatePlugin('testwidget');
}
}
当然没有用。程序抛出错误:[Error] Call to undefined function is_plugin_active()
,因为 Wordpress 函数 is_plugin_active 不在范围内。
Codeception 的文档说有conditional assertions --that is, methods like canSeeElement
or cantSeeElement
, used to test that an element is on the page and will not stop the test if they fail. It seems there is something similar for Codeception actions, as you can see here。
我不知道这些步骤装饰器是否可以作为解决方案,因为我不清楚它们是如何工作的以及如何设置它们。
你认为解决这个问题最简单的方法是什么?如果你处在我的位置,你会如何解决?
验收测试无法执行任何服务器端代码,因此您无法使用wordpress功能,您只能使用WpWebDriver模块提供的辅助方法与网站进行交互。
由于 see
方法在看不到预期内容时会抛出异常,因此您可以捕获该异常并仅在不满足断言时执行其他代码。
public function _before(AcceptanceTester $I)
{
$I->loginAsAdmin();
$I->amOnPluginsPage();
try {
//it throws PHPUnit Assertion Failed exception if plugin is active.
$I->seePluginDeactivated('my-plugin');
} catch (\Exception $e) {
$I->deactivatePlugin('hello-dolly');
}
}
如果您想在许多测试文件中重复使用此代码,请将其设为辅助方法,如 https://codeception.com/docs/06-ModulesAndHelpers#Helpers
中所述
我正在学习如何在 Wordpress 中编写插件,我想测试插件在激活时的行为。我正在使用 Codeception/Wp-Browser 作为 TDD 框架。我打算使用模块 WpWebDriver 和 Chrome.
编写一个 验收测试问题是我写的测试互相干扰。因此,我需要在每次测试前重置插件的状态,但我不知道该怎么做。
在每次测试之前我需要:
- 测试插件是否激活
- 如果是,则停用
- 如果不是,则什么都不做
我知道我可以在 Cest class 中使用 _before
方法。这是我的代码:
<?php
class activationCest
{
public function _before(AcceptanceTester $I)
{
// what to do here???
}
public function _after(AcceptanceTester $I)
{
}
// tests
public function activationCaseFailPHP(AcceptanceTester $I)
{
$I->wantTo('see an error message if the PHP version
is not compatible with the plugin');
$I->loginAsAdmin();
$I->amOnPluginsPage();
$I->activatePlugin('testwidget');
$I->see('Your PHP version is outdated.
Testwidget requires a PHP version equal or superior
to 7.0. Contact your hosting provider about
how to update PHP');
}
public function activationCaseFailWP(AcceptanceTester $I)
{
$I->wantTo('see an error message if the Wordpress version
is not compatible with the plugin');
$I->loginAsAdmin();
$I->amOnPluginsPage();
$I->activatePlugin('testwidget');
$I->see('Your Wordpress version is outdated.
Testwidget requires a Wordpress version equal
or superior to 5.0. Contact your hosting provider
about how to update Wordpress');
}
public function activationCaseSuccess(AcceptanceTester $I)
{
$I->wantTo('see a success message if the PHP and Wordpress versions are
compatible with the plugin');
$I->loginAsAdmin();
$I->amOnPluginsPage();
$I->activatePlugin('testwidget');
$I->see('Selected plugins activated', '#message');
}
}
我天真地试过了
public function _before(AcceptanceTester $I)
{
if (is_plugin_active('testwidget')) {
$I->deactivatePlugin('testwidget');
}
}
当然没有用。程序抛出错误:[Error] Call to undefined function is_plugin_active()
,因为 Wordpress 函数 is_plugin_active 不在范围内。
Codeception 的文档说有conditional assertions --that is, methods like canSeeElement
or cantSeeElement
, used to test that an element is on the page and will not stop the test if they fail. It seems there is something similar for Codeception actions, as you can see here。
我不知道这些步骤装饰器是否可以作为解决方案,因为我不清楚它们是如何工作的以及如何设置它们。
你认为解决这个问题最简单的方法是什么?如果你处在我的位置,你会如何解决?
验收测试无法执行任何服务器端代码,因此您无法使用wordpress功能,您只能使用WpWebDriver模块提供的辅助方法与网站进行交互。
由于 see
方法在看不到预期内容时会抛出异常,因此您可以捕获该异常并仅在不满足断言时执行其他代码。
public function _before(AcceptanceTester $I)
{
$I->loginAsAdmin();
$I->amOnPluginsPage();
try {
//it throws PHPUnit Assertion Failed exception if plugin is active.
$I->seePluginDeactivated('my-plugin');
} catch (\Exception $e) {
$I->deactivatePlugin('hello-dolly');
}
}
如果您想在许多测试文件中重复使用此代码,请将其设为辅助方法,如 https://codeception.com/docs/06-ModulesAndHelpers#Helpers
中所述