首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >协同欺骗项目找不到AcceptanceTester

协同欺骗项目找不到AcceptanceTester
EN

Stack Overflow用户
提问于 2021-04-21 22:53:58
回答 1查看 409关注 0票数 1

我正在10.15上用php v7.3.27和composer v2.0.12从头开始创建一个新项目。我以前在另一台计算机上创建了一个协同欺骗项目。我遵循了使用验收测试的快速启动指南。

我使用"php供应商/bin/codecept generate:pageobject acceptance“生成页面对象,并使用"php供应商/bin/codecept生成:cest验收”生成cest。

当我尝试运行任何测试时,它都说没有找到这个类。如果我悬停在我的页面或单词AcceptanceTester上,它不会将我链接到任何东西。我的项目如下:

代码语言:javascript
复制
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,类似于我在工作计算机上拥有的内容:

代码语言:javascript
复制
#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看起来是这样的:

代码语言:javascript
复制
    tests: tests
    output: tests/_output
    data: tests/_data
    support: tests/_support
    envs: tests/_envs
actor_suffix: Tester
extensions:
    enabled:
        - Codeception\Extension\RunFailed

我的composer.json看起来是这样的:

代码语言:javascript
复制
    "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/"
        }
    }
}

我的一个Cest文件如下所示:

代码语言:javascript
复制
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);
    }
}

我的页面类如下:

代码语言:javascript
复制
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;
    }

}

如果我试图运行这些测试,就会得到以下错误:

代码语言:javascript
复制
[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是通过共同欺骗自动生成的:

代码语言:javascript
复制
/**
 * 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->,它就不会看到任何欺骗方法。我已经在Vscode中添加了Codeception扩展。如果我在我的方法的param上悬停在AcceptanceTester上,它就不会带我到类文件。如果我悬停在页面上,它就不会带我到页面对象文件。就像我在瞎飞一样。错误发生在vscode和外部vscode在终端。

我试过:

work

  • Restarting vscode

  • Running

  • 在类名之上或下面添加"use AcceptanceTester“,并使用相对路径/绝对路径,不构建commands

  • Trying来扩展AcceptanceTester (不使用work)

  • Googling并查看页面中的其他answers

  • Removing名称空间(使情况更糟),说佩奇没有找到then)

  • Commenting,没有找到对页面对象的调用,并且使用var_dump("hello“)使测试通过,但是很明显,测试做了nothing

  • realized,我也有zshell,而且没有.zshrc,所以.zshrc尝试了与bash命令相同的命令。此外,bash profile

  • 运行了自动转储程序

  • 来准确地跟踪错误消息,并将AcceptanceTester文件移动到/ page /Acceptance文件夹中,但是当我运行测试时,错误更改为“在套件文件夹中不存在AcceptanceTester类。运行'build‘命令来生成它”,如果我运行build,它就会将AcceptanceTester.php放回原来的位置!

  • 彻底摧毁了我的整个项目,并在没有页面文件的情况下重新开始,只使用单个类文件,按照快速启动文档中的引导指令执行。Cest仍然不认为AcceptanceTester $I与AcceptanceTester.php相关,并说“调用未定义的方法AcceptanceTester::waitForElement”。没有运气地重新尝试了上面的步骤。

  • 把所有的东西都推到了git,然后关闭了工作的计算机,得到了一个完全不同的错误:不存在

目录。我设立这个项目不是为了实用,而是为了让人接受。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-22 18:40:55

您需要在方法签名中的AcceptanceTester类名之前指定反斜杠,以便在根命名空间中找到类:

public function signUp(\AcceptanceTester $I)

public static function fillGetQuickAndEasyPrice(\AcceptanceTester $I, $address, $name, $phone)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67204477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档