Codeception / Codeception/Codeception

Feature file does not recognize an implemented step

Open
#6,704 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
PHP
Stars
4.9k
Forks
1.3k
PR merge metrics
No merged PRs in 30d

Description

I'm trying to make a POC using Codeconcept with BDD. I've created a stepobject and I wanted to use this file for test steps. I've followed [CONFIGURATION](https://codeception.com/docs/BDD) section to autoload the additional steps file since only context files can contain these. When I run `php vendor/bin/codecept gherkin:steps Acceptance` I get this as a result:

Steps from default context:
```
+-----------------------------------------+---------------------------------------------------------
| Step | Implementation
+-----------------------------------------+---------------------------------------------------------
| The user logs in with the default user. | Tests\Support\Step\Acceptance\LoginSteps::loginWithDefaultUser |
+-----------------------------------------+---------------------------------------------------------
```
When I run the test with` php vendor/bin/codecept run --debug` the test runs successfully, and when I run the test from PHPStorm itself, the test also runs successfully. Nonetheless the step is not recognised in the feature file and it is showed as an undefined step reference.

Below you can find all the specs, files, and steps I did:

Specs:

PHP version: 8.2.11
Codeception version: 5.0.11
System: Windows 10 / IDE: PHPStorm
Here are the steps I did:

I've installed codeconcept with `composer require codeception/module-webdriver --dev`
I've installed the webdriver module with` composer require codeception/module-webdriver --dev --ignore-platform-req=ext-zip`
I've run `php vendor/bin/codecept bootstrap` - this generated all suites
I've generated one pageobject file with` php vendor/bin/codecept g:pageobject Acceptance Login`
I've generated one stebobject file with `php vendor/bin/codecept g:stepobject Acceptance LoginSteps`
I've generated one feature file with `php vendor/bin/codecept g:feature Acceptance coupon`
This is how my directory looks like:

```
/codeception
├── codeception.yml
├── tests
│ ├── Acceptance.suite.yml
| ├── Acceptance
| | └── coupon.feature
│ ├── Support
│ │ ├── AcceptanceTester.php
│ │ ├── Step
│ │ │ └── Acceptance
│ │ │ └── LoginSteps.php
| | ├── Page
| | | └── Acceptance
| | | └── Login.php
```

**This is the content of** `codeception.yml`:

```
namespace: Tests
support_namespace: Support
paths:
tests: tests
output: tests/_output
data: tests/Support/Data
support: tests/Support
envs: tests/_envs
actor_suffix: Tester
extensions:
enabled:
- Codeception\Extension\RunFailed

params:
- .env
```

**This is the content of** ` Acceptance.suite.yml`:

```
actor: AcceptanceTester
modules:
enabled:
- WebDriver:
url: 'https://test.com/'
browser: chrome

# add Codeception\Step\Retry trait to AcceptanceTester to enable retries
step_decorators:
- Codeception\Step\ConditionalAssertion
- Codeception\Step\TryTo
- Codeception\Step\Retry

gherkin:
contexts:
path: tests/Support/Step
namespace_prefix: Tests\Support\Step
default:
- Tests\Support\AcceptanceTester
```

**This is the content of** `Login.php`:

```
namespace Tests\Support\Page\Acceptance;

use Tests\Support\AcceptanceTester;

class Login
{
public string $accountField = "input[name='account']";
public string $emailField = "input[name='mail']";
public string $passwordField = "input[name='password']";
public string $loginButton = "button[type='submit']";

/**
* @var AcceptanceTester;
*/
protected AcceptanceTester $acceptanceTester;

public function __construct(AcceptanceTester $I)
{
$this->acceptanceTester = $I;
}

public function fillAccountField(string $account): void
{
$this->acceptanceTester->fillField($this->accountField, $account);
}

public function fillEmailField(string $email): void
{
$this->acceptanceTester->fillField($this->emailField, $email);
}

public function fillPasswordField(string $password): void
{
$this->acceptanceTester->fillField($this->passwordField, $password);
}

public function clickLoginButton(): void
{
$this->acceptanceTester->click($this->loginButton);
}

}
```

**This is the content of** `LoginSteps.php`:

```
namespace Tests\Support\Step\Acceptance;

use Codeception\Attribute\When;
use Tests\Support\AcceptanceTester;
use Tests\Support\Page\Acceptance\Login;

class LoginSteps
{

protected AcceptanceTester $acceptanceTester;

public function __construct(AcceptanceTester $I)
{
$this->acceptanceTester = $I;
}

#[When('The user logs in with the default user.')]
public function loginWithDefaultUser(): void
{
$this->acceptanceTester->amOnPage("/");
$loginPage = new Login($this->acceptanceTester);
$loginPage->fillAccountField($_ENV['BRAND_NAME']);
$loginPage->fillEmailField($_ENV['DEFAULT_USERNAME']);
$loginPage->fillPasswordField($_ENV['DEFAULT_PASSWORD']);
$loginPage->clickLoginButton();
}

}
```

**This is the content of** `coupon.feature`:

```
Feature: coupon

Scenario: try coupon
* The user logs in with the default user. - THIS STEP IS NOT RECOGNIZED!
```

Am I missing something here?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.