使用PHPUnit测试重写规则

时间:2017-03-22 作者:Zakalwe

我正在开发一个插件来简化对Wordpress的重写。我已经开始使用Wordpress测试套件。基本上我有一门课RewriteManager 您可以向其中添加Rewrite 对象。方法之一RewriteisThisRewrite() 它查询自身以确定调用的url是否与此重写相关:

// add the rewrite to the manager
$manager->addRewrite(new Rewrite(array(
    "path" => "test/path/([^/]+)/([^/]+)/?$",
    "querystring" => "index.php?rewrite=test&test=$matches[1]&test2=$matches[2]"
);

// start the manager - takes care of adding the rules, query vars etc...
$manager->start();
我希望在单元测试中添加一个重写规则,导航到相关url,然后查询query\\u vars,以确保已正确添加该规则。我尝试了以下方法:

$this->manager->addRewrite($this->actionRewrite);
$this->manager->start();
flush_rewrite_rules();

$this->go_to("/test/path/hello/there");
在这一点上,我预计$wp_query 要显示testtest2 显示相关填充的查询变量,但根本没有查询变量。是否有特定的方法来测试自定义重写?

1 个回复
SO网友:Mark Kaplun

这里有两个问题,一个是概念问题,一个是实践问题

Conceptional: 您正在测试什么?如果您正在测试函数是否确实将规则插入到重写规则集中,那么您应该只检查生成的重写规则数组(可能从选项中)。除此之外的任何东西都不是“单元测试”,更多的是“集成测试”,它有自己的位置,可以用phpunit完成,但它不是单元测试。

Practical: wordpress单元测试套件使用难看的permalink设置启动,因此根本不会进行url解析。您需要将设置更改为任何其他永久链接结构。您可能还希望使用完整url,因为解析可能会首先尝试匹配站点url。

相关推荐