CakePHP:测试前端页面

时间:2014-07-16 20:57:03

标签: cakephp phpunit

我想测试我网站上的所有前端页面,以确保用户无需登录即可访问它们。这就是我提出的(有效),但我想知道是否有更好的方法:

public function testAboutUsPage() {
    $result = $this->testAction('/pages/about_us', array('return' => 'view'));

    if(! $result) {
        $this->assertFalse($result);
    }
}

如果页面未受auth组件保护,它将返回视图的内容。如果它受到保护(需要登录),$ result将为null。

1 个答案:

答案 0 :(得分:0)

你走在正确的轨道上,尽管你应该做出一些断言,不管你是否得到了结果。在当前代码中,如果结果为false,则只会输入if(! $result)块 - 这意味着下一行$this->assertFalse($result);会通过。你刚刚在前一行检查过它是假的!

当您进行测试时,您会做出一个您期望有效的断言。如果您的代码被破坏,您的断言将无效,您的测试将失败。

我这样做:(请注意,我作为assert调用的第二个参数传入的字符串基本上是如果该代码失败将会获得的错误消息。)

要测试公共页面,可以查看:

public function testPublicPage() {
    $result = $this->testAction('/pages/public', array('return' => 'view'));
    $this->assertNotEmpty($result, "we were not able to view a public page");
}

要测试私人页面无法查看:

public function testPrivatePage() {
    $result = $this->testAction('/pages/private', array('return' => 'view'));
    $this->assertNull($result, "we were able to view a private page");
}

关于测试需要了解的另一件事:当你编写测试时,确保它实际上是在测试你应该测试的东西:

a)运行它并确保它通过
同样重要:
b)故意破坏与该测试相关的代码,并确保其失败。

否则你不知道你的测试实际上正在测试任何东西!我不会在这里进入“测试驱动开发” - 但基本上你的想法是先编写测试(在编写代码之前),运行它以确保它失败,然后编写代码直到测试通过。这是确保你同时获得a)和b)检查的另一种好方法。