代码接收功能测试示例在实际应用中失败

时间:2018-08-24 17:07:07

标签: php laravel functional-testing codeception

Codeception在https://codeception.com/docs/05-UnitTests

上有功能测试文档。

因此,在我的laravel / homestead项目中,请按照以下步骤操作:

在functional.sute.yml中:

class_name: FunctionalTester
modules:
    enabled:
    - Laravel5
    - \Helper\Functional

我的测试:

  <?php


    class LoginCest
    {
        public function _before(FunctionalTester $I)
        {
        }

        public function _after(FunctionalTester $I)
        {
        }

        // tests
        public function tryLogin (FunctionalTester $I)
        {
            $I->amOnPage('/login');
            $I->fillField('email', 'someemail');
            $I->fillField('password', 'somepw');
            $I->click('Login');
            $

    I->see('some text');
            }
        }

因此,当我运行测试时,它会失败:

There was 1 error:



 ---------
    1) LoginCest: Try login
     Test  tests/functional/LoginCest.php:tryLogin

      [ExternalUrlException] Codeception\Module\Laravel5 can't open external URL: http://myapp.test/login  


    Scenario Steps:

     4. $I->click("Login") at tests/functional/LoginCest.php:20
     3. $I->fillField("password","somepw") at tests/functional/LoginCest.php:19
     2. $I->fillField("email","someemail") at tests/functional/LoginCest.php:18
     1. $I->amOnPage("/login") at tests/functional/LoginCest.php:17

    #1  Codeception\Lib\InnerBrowser->click
    #2  /home/vagrant/Code/my-app/tests/_support/_generated/FunctionalTesterActions.php:1114
    #3  /home/vagrant/Code/my-app/tests/functional/LoginCest.php:20
    #4  LoginCest->tryLogin

    ERRORS!
    Tests: 1, Assertions: 0, Errors: 1.

我的应用网址是在宅基地上运行的someapp.test。

在查看我的LoginController时,我看到:

$this->redirectTo();

在最后。

现在,我了解功能测试不需要网络服务器,并且我可以使用验收测试使其正常工作。但实际上很难理解为什么即使您甚至不能指定URL也会有人使用代码接收进行功能测试。当其他人可能遇到类似问题时,为什么代码接收会使用登录示例进行功能测试?

1 个答案:

答案 0 :(得分:2)

首先是一些背景。

URL包含以下主要部分:PROTOCOL:// DOMAIN:PORT / URI?QUERY_STRING#HASH HASH仅在客户端使用,而不传递给Web服务器,因此不能用于路由。 PROTOCOL和PORT可以用于路由,但这是非常不寻常的。 某些网站根据用于访问它们的DOMAIN显示不同的内容, 但大多数只使用URI和/或QUERY_STRING部分来路由和显示正确的页面。

使用Codeception进行功能测试的主要区别在于,它不需要网络服务器,因此大多数情况下都不关心域名。

网站代码通常并不在乎是否使用http://myapp.test/http://google.com/来访问,并且很高兴返回其中任何一个的首页。 尽管如果单击http://google.com/链接显示了首页,则几乎可以肯定是错误的。 为了防止这种情况,几年前就实施了外部域检查。

您网站中的所有内部链接都必须没有域组件,或者必须与使用Host标头传递的内容相匹配。 对于domain based routing使用的域是例外情况,此类域可用于测试。