如何解决Codeception项目找不到AcceptanceTester
我正在 Mac Catalina 10.15 上使用 PHP v7.3.27 和 composer v2.0.12 从头开始创建一个新项目。我之前创建了一个 Codeception 项目,但在另一台计算机上。我遵循了使用验收测试的快速入门指南。
我使用“PHP vendor/bin/codecept generate:pageobject Acceptance”生成页面对象,并使用“PHP vendor/bin/codecept generate:cest Acceptance”生成Cests
当我尝试运行任何测试时,它说找不到该类。如果我将鼠标悬停在我的页面或 AcceptanceTester 一词上,它不会将我链接到任何内容。我的项目如下所示:
tests
> data
> output
v support
v _generated
AcceptanceTesteractions.PHP
FunctionalTesteractions.PHP
UnitTesteractions.PHP
> Helper
> Page/Acceptance
CustomerSignupHomePage.PHP
AcceptanceTester.PHP
FunctionalTester.PHP
UnitTester.PHP
v acceptance
CustomerSignupCest.PHP
我意识到我的主目录中没有 .bashrc,所以我创建了一个并更新了 bash_profile,类似于我在工作计算机上的内容:
#Global composer bin
export $PATH=~/.composer/vendor/bin:$PATH
export $PATH="$HOME/.composer/vendor/bin:$PATH"
cat .bash_profile
#alias composer="PHP /usr/local/bin/composer.phar"
export PATH="./composer/vendor/bin/:$PATH"
export PATH="/usr/local/opt/PHP@7.3/bin:$PATH"
export PATH="/usr/local/opt/PHP@7.3/sbin:$PATH"
~
我的 codeception.yml 看起来像这样:
tests: tests
output: tests/_output
data: tests/_data
support: tests/_support
envs: tests/_envs
actor_suffix: Tester
extensions:
enabled:
- Codeception\Extension\RunFailed
我的 composer.json 看起来像这样:
"require-dev": {
"codeception/codeception": "^4.1","codeception/module-PHPbrowser": "^1.0.0","codeception/module-asserts": "^1.0.0"
},"require":{
"ext-zip": "*","guzzlehttp/guzzle": "^7.2","vlucas/PHPdotenv": "^5.2"
},"autoload": {
"psr-4": {
"Tests\\Support\\": "tests/_support/"
}
}
}
use Tests\Support\Page\Acceptance\CustomerSignupHomePage;
class CustomerSignupCest
{
const ADDRESS = "100 Silmarillion Trail,Austin TX 78739";
const NAME = "POC Automation Tester";
const PHONE = "512-203-5555";
/**
* signUp
*
* @param AcceptanceTester $I
* @return void
*/
public function signUp(AcceptanceTester $I)
{
$I->wantToTest("the signup flow");
CustomerSignupHomePage::fillGetQuickAndEasyPrice($I,self::ADDRESS,self::NAME,self::PHONE);
}
}
我的页面类如下所示:
namespace Tests\Support\Page\Acceptance;
class CustomerSignupHomePage
{
// include url of current page
public static $URL = 'https://dev-www.<mycompany>.com';
/**
* Declare UI map for this page here. CSS or XPath allowed.
* public static $usernameField = '#username';
* public static $formSubmitButton = "#mainForm input[type=submit]";
*/
const ADDRESS_INPUT = "#streetAddress";
const SEE_PRICE_BUTTON = ".js-submitButton";
const NAME_INPUT = ".js-fullNameInput";
const PHONE_INPUT = ".js-phoneInput";
/**
* fillGetQuickAndEasyPrice
*
* @param AcceptanceTester $I
* @param mixed $address
* @param mixed $name
* @param mixed $phone
* @return void
*/
public static function fillGetQuickAndEasyPrice(AcceptanceTester $I,$address,$name,$phone)
{
$I->waitForElement(self::ADDRESS_INPUT);
$I->fillField(self::ADDRESS_INPUT,$address);
$I->click(self::SEE_PRICE_BUTTON);
$I->fillField(self::NAME_INPUT,$name);
$I->fillField(self::PHONE_INPUT,$phone);
$I->click(self::SEE_PRICE_BUTTON);
}
/**
* Basic route example for your current URL
* You can append any additional parameter to URL
* and use it in tests like: Page\Edit::route('/123-post');
*/
public static function route($param)
{
return static::$URL.$param;
}
/**
* @var \AcceptanceTester;
*/
protected $acceptanceTester;
public function __construct(\AcceptanceTester $I)
{
$this->acceptanceTester = $I;
}
}
如果我尝试运行测试,我会收到此错误:
[TypeError] Argument 1 passed to Tests\Support\Page\Acceptance\CustomerSignupHomePage::fillGetQuickAndEasyPrice() must be an instance of Tests\Support\Page\Acceptance\AcceptanceTester,instance of AcceptanceTester given,called in /Users/julie/workspaces/Codeception-Demo/tests/acceptance/CustomerSignupCest.PHP on line 21
我的 AcceptanceTester.PHP 是 codeception 自动生成的:
/**
* Inherited Methods
* @method void wantToTest($text)
* @method void wantTo($text)
* @method void execute($callable)
* @method void expectTo($prediction)
* @method void expect($prediction)
* @method void amGoingTo($argumentation)
* @method void am($role)
* @method void lookForwardTo($achieveValue)
* @method void comment($description)
* @method void pause()
*
* @SuppressWarnings(PHPMD)
*/
class AcceptanceTester extends \Codeception\Actor
{
use _generated\AcceptanceTesteractions;
/**
* Define custom actions here
*/
}
我的 Cest 文件和页面文件根本看不到 AutomationTester。如果我开始输入 $I-> 它看不到任何代码接收方法。我已将 Codeception 市场扩展添加到 Vscode。如果我将鼠标悬停在我的方法参数中的 AcceptanceTester 上,它不会将我带到类文件。如果我将鼠标悬停在页面上,它不会将我带到页面对象文件。这就像我在盲目飞行。错误发生在 vscode 中和终端中的 vscode 之外。
我试过了:
- 在类名上方或下方添加“use AcceptanceTester”并使用相对路径/绝对路径,不起作用
- 重新启动 vscode
- 运行构建命令
- 尝试扩展 AcceptanceTester(不起作用)
- 谷歌搜索并查看其他 SO 答案
- 从页面中删除命名空间(更糟,说页面未找到)
- 注释掉对页面对象的调用并使用 var_dump("hello world")- 使测试通过,但显然测试什么也不做
- 意识到我也有 zshell,但也没有 .zshrc,所以尝试了与 bash 相同的命令。还获取了 bash 配置文件
- 运行自动转储命令
- 尝试准确遵循错误消息并将 AcceptanceTester 文件移动到 /Page/Acceptance 文件夹中,但是当我运行测试时,错误更改为“套件文件夹中不存在 AcceptanceTester 类。运行‘build’命令生成它”如果我运行构建,那么它会将 AcceptanceTester.PHP 放回原来的位置!
- 按照带有引导程序说明的快速入门文档,完成我的整个项目并重新开始,没有页面文件,只有单个类文件。 Cest 仍然没有看到 AcceptanceTester $I 与 AcceptanceTester.PHP 相关并说“调用未定义的方法 AcceptanceTester::waitForElement”。重试了上面的步骤,但没有成功。
- 将所有内容推送到 git,然后在工作计算机上关闭并得到完全不同的错误:“/Users/julielaursen/git/Codeception-Demo/tests/functional/”目录不存在。我还没有为功能而设置项目,而是为了接受。
解决方法
您需要在方法签名中的 AcceptanceTester
类名前指定反斜杠才能在根命名空间中查找类:
public function signUp(\AcceptanceTester $I)
public static function fillGetQuickAndEasyPrice(\AcceptanceTester $I,$address,$name,$phone)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。