协同欺骗提供了功能测试的文档,位于:https://codeception.com/docs/05-UnitTests
因此,在我的laravel/宅基地项目上,我做了如下工作:
在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.
我的应用程序url是someapp.test,它运行在宅基地上。
在查看我的LoginController时,我看到:
$this->redirectTo();
就在最后。
现在,我知道功能测试不需要work服务器,我可能会使用验收测试使其工作。但是,如果你甚至不能指定一个url,那么就很难理解为什么有人会使用共同欺骗来进行功能测试。另外,当其他人可能面临类似的问题时,为什么同谋欺骗会在功能测试中使用登录示例?
发布于 2018-08-26 23:33:36
先了解一些背景。
URL由以下几个主要部分组成:协议://域:端口/URI?QUERY_STRING#散列仅在客户端使用,不传递给for服务器,因此不能用于路由。协议和端口可以用于路由,但这是非常不寻常的。一些网站根据用于访问它们的域显示不同的内容,但大多数网站只使用URI和/或QUERY_STRING部件来路由和显示正确的页面。
使用协同欺骗的功能测试的主要区别在于它不需要and服务器,因此大部分不关心域名。
网站代码通常不关心是否使用http://myapp.test/或http://google.com/访问,并愉快地返回您的首页为两者之一。虽然如果点击http://google.com/链接显示了您的头版,这几乎肯定是错误的。为了防止这种情况,外部域检查是在几年前实施的。
您的网站中的所有内部链接必须没有域组件,或者必须与使用主机头传递的链接匹配。为用于基于域的路由的域创建异常,此类域可用于测试。
https://stackoverflow.com/questions/52008977
复制