<p dir="auto">I have moved my playwright config and tests folder to a sub-folder <code class="notranslate">web</code> in my repo. Upon doing this, running playwright fails:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&gt; playwright test --config=./web/playwright.config.ts

Using config at /Users/sarink/Projects/test-proj/web/playwright.config.ts

Error: web/tests/example.spec.ts:5:16: test() can only be called in a test file


    at errorWithLocation (/Users/kabirsarin/sarink/Projects/basil/web/node_modules/@playwright/test/lib/util.js:161:10)
    at TestTypeImpl._createTest (/Users/kabirsarin/sarink/Projects/basil/web/node_modules/@playwright/test/lib/testType.js:76:51)
    at /Users/kabirsarin/sarink/Projects/basil/web/node_modules/@playwright/test/lib/transform.js:168:12
    at Object.&lt;anonymous&gt; (/Users/kabirsarin/sarink/Projects/basil/web/tests/example.spec.ts:5:16)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Module._compile (/Users/kabirsarin/sarink/Projects/basil/node_modules/pirates/lib/index.js:136:24)
    at Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Object.newLoader (/Users/kabirsarin/sarink/Projects/basil/node_modules/pirates/lib/index.js:141:7)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Loader._requireOrImport (/Users/kabirsarin/sarink/Projects/basil/node_modules/@playwright/test/lib/loader.js:261:14)
    at Loader.loadTestFile (/Users/kabirsarin/sarink/Projects/basil/node_modules/@playwright/test/lib/loader.js:142:18)
    at Runner._run (/Users/kabirsarin/sarink/Projects/basil/node_modules/@playwright/test/lib/runner.js:272:84)"><pre class="notranslate"><code class="notranslate">&gt; playwright test --config=./web/playwright.config.ts

Using config at /Users/sarink/Projects/test-proj/web/playwright.config.ts

Error: web/tests/example.spec.ts:5:16: test() can only be called in a test file


    at errorWithLocation (/Users/kabirsarin/sarink/Projects/basil/web/node_modules/@playwright/test/lib/util.js:161:10)
    at TestTypeImpl._createTest (/Users/kabirsarin/sarink/Projects/basil/web/node_modules/@playwright/test/lib/testType.js:76:51)
    at /Users/kabirsarin/sarink/Projects/basil/web/node_modules/@playwright/test/lib/transform.js:168:12
    at Object.&lt;anonymous&gt; (/Users/kabirsarin/sarink/Projects/basil/web/tests/example.spec.ts:5:16)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Module._compile (/Users/kabirsarin/sarink/Projects/basil/node_modules/pirates/lib/index.js:136:24)
    at Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Object.newLoader (/Users/kabirsarin/sarink/Projects/basil/node_modules/pirates/lib/index.js:141:7)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Loader._requireOrImport (/Users/kabirsarin/sarink/Projects/basil/node_modules/@playwright/test/lib/loader.js:261:14)
    at Loader.loadTestFile (/Users/kabirsarin/sarink/Projects/basil/node_modules/@playwright/test/lib/loader.js:142:18)
    at Runner._run (/Users/kabirsarin/sarink/Projects/basil/node_modules/@playwright/test/lib/runner.js:272:84)
</code></pre></div>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="// web/playwright.config.ts

import { devices, PlaywrightTestConfig } from '@playwright/test';

/**
 * See https://playwright.dev/docs/test-configuration.
 */
const config: PlaywrightTestConfig = {
  testDir: './tests',

  /* Maximum time one test can run for. */
  timeout: 30 * 1000,

  expect: {
    /**
     * Maximum time expect() should wait for the condition to be met.
     * For example in `await expect(locator).toHaveText();`
     */
    timeout: 5000,
  },

  /* Fail the build on CI if you accidentally left test.only in the source code. */
  forbidOnly: !!process.env.CI,

  /* Retry on CI only */
  retries: process.env.CI ? 2 : 0,

  /* Opt out of parallel tests on CI. */
  workers: process.env.CI ? 1 : undefined,

  /* Reporter to use. See https://playwright.dev/docs/test-reporters */
  reporter: process.env.CI ? 'github' : 'list',

  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
  use: {
    /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */
    actionTimeout: 0,

    /* Base URL to use in actions like `await page.goto('/')`. */
    // baseURL: 'http://localhost:3000',

    /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
    trace: 'on-first-retry',
  },

  /* Configure projects for major browsers */
  projects: [
    {
      name: 'chromium',

      /* Project-specific settings. */
      use: {
        ...devices['Desktop Chrome'],
      },
    },

    {
      name: 'firefox',
      use: {
        ...devices['Desktop Firefox'],
      },
    },

    {
      name: 'webkit',
      use: {
        ...devices['Desktop Safari'],
      },
    },

    /* Test against mobile viewports. */
    // {
    //   name: 'Mobile Chrome',
    //   use: {
    //     ...devices['Pixel 5'],
    //   },
    // },
    // {
    //   name: 'Mobile Safari',
    //   use: {
    //     ...devices['iPhone 12'],
    //   },
    // },

    /* Test against branded browsers. */
    // {
    //   name: 'Microsoft Edge',
    //   use: {
    //     channel: 'msedge',
    //   },
    // },
    // {
    //   name: 'Google Chrome',
    //   use: {
    //     channel: 'chrome',
    //   },
    // },
  ],

  /* Folder for test artifacts such as screenshots, videos, traces, etc. */
  // outputDir: 'test-results/',

  /* Run your local dev server before starting the tests */
  // webServer: {
  //   command: 'npm run start',
  //   port: 3000,
  // },
};
export default config;"><pre class="notranslate"><code class="notranslate">// web/playwright.config.ts

import { devices, PlaywrightTestConfig } from '@playwright/test';

/**
 * See https://playwright.dev/docs/test-configuration.
 */
const config: PlaywrightTestConfig = {
  testDir: './tests',

  /* Maximum time one test can run for. */
  timeout: 30 * 1000,

  expect: {
    /**
     * Maximum time expect() should wait for the condition to be met.
     * For example in `await expect(locator).toHaveText();`
     */
    timeout: 5000,
  },

  /* Fail the build on CI if you accidentally left test.only in the source code. */
  forbidOnly: !!process.env.CI,

  /* Retry on CI only */
  retries: process.env.CI ? 2 : 0,

  /* Opt out of parallel tests on CI. */
  workers: process.env.CI ? 1 : undefined,

  /* Reporter to use. See https://playwright.dev/docs/test-reporters */
  reporter: process.env.CI ? 'github' : 'list',

  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
  use: {
    /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */
    actionTimeout: 0,

    /* Base URL to use in actions like `await page.goto('/')`. */
    // baseURL: 'http://localhost:3000',

    /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
    trace: 'on-first-retry',
  },

  /* Configure projects for major browsers */
  projects: [
    {
      name: 'chromium',

      /* Project-specific settings. */
      use: {
        ...devices['Desktop Chrome'],
      },
    },

    {
      name: 'firefox',
      use: {
        ...devices['Desktop Firefox'],
      },
    },

    {
      name: 'webkit',
      use: {
        ...devices['Desktop Safari'],
      },
    },

    /* Test against mobile viewports. */
    // {
    //   name: 'Mobile Chrome',
    //   use: {
    //     ...devices['Pixel 5'],
    //   },
    // },
    // {
    //   name: 'Mobile Safari',
    //   use: {
    //     ...devices['iPhone 12'],
    //   },
    // },

    /* Test against branded browsers. */
    // {
    //   name: 'Microsoft Edge',
    //   use: {
    //     channel: 'msedge',
    //   },
    // },
    // {
    //   name: 'Google Chrome',
    //   use: {
    //     channel: 'chrome',
    //   },
    // },
  ],

  /* Folder for test artifacts such as screenshots, videos, traces, etc. */
  // outputDir: 'test-results/',

  /* Run your local dev server before starting the tests */
  // webServer: {
  //   command: 'npm run start',
  //   port: 3000,
  // },
};
export default config;
</code></pre></div>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="// web/tests/example.spec.ts
import { expect, test } from '@playwright/test';

test('basic test', async ({ page }) =&gt; {
  await page.goto('https://playwright.dev/');
  await page.locator('text=Get started').click();
  await expect(page).toHaveTitle(/Getting started/);
});"><pre class="notranslate"><code class="notranslate">// web/tests/example.spec.ts
import { expect, test } from '@playwright/test';

test('basic test', async ({ page }) =&gt; {
  await page.goto('https://playwright.dev/');
  await page.locator('text=Get started').click();
  await expect(page).toHaveTitle(/Getting started/);
});
</code></pre></div>
<p dir="auto">If I move the config and the tests folder back to the root, and drop the <code class="notranslate">--config</code> cli flag, everything works as expected.</p>
<p dir="auto">Currently if <code class="notranslate">soft assertion</code> fails inside of <code class="notranslate">test.step()</code> test step remains with passed checkmark icon near of it.</p>
<p dir="auto">It would be helpful if user could mark <code class="notranslate">test.step()</code> as failed programmatically, so it would be more clear in report that assertions inside of the step are failed.</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/22345107/191755993-21f73050-ae0b-45f0-b3b8-4659572e51d1.png"><img src="https://user-images.githubusercontent.com/22345107/191755993-21f73050-ae0b-45f0-b3b8-4659572e51d1.png" alt="2022-09-22_16-10" style="max-width: 100%;"></a></p>