Run the slow specs again

- Removes the skip from Bounties and CreateAccount.
- test:slow runs only the .slow. specs.
- Each step waits up to 20s instead of the 1s default, since it waits on a
  live chain. The previous setting is restored when the file ends.
- assertDevNode fails a spec at once when no dev node answers. Without it the
  api keeps reconnecting and the spec waits until the job's timeout.
This commit is contained in:
Satoshi Qazi Muhammed committed 2026-10-11 23:12:51 +04:00
1 parent 29f7a91552
commit bea09e39c8
5 files changed
+63 -14

No files matched your search

+2 -1
View File
@@ -45,7 +45,8 @@
"test": "pezkuwi-dev-run-test --experimental-test-module-mocks --env browser ^typesBundle ^chainEndpoints ^chainTypes ^:.slow.",
"test:all": "pezkuwi-dev-run-test --experimental-test-module-mocks --env browser ^chainEndpoints ^chainTypes",
"test:one": "pezkuwi-dev-run-test --experimental-test-module-mocks --env browser",
"test:skipped": "echo 'tests skipped'"
"test:skipped": "echo 'tests skipped'",
"test:slow": "pezkuwi-dev-run-test --experimental-test-module-mocks --env browser :.slow."
},
"devDependencies": {
"@pezkuwi/dev": "^0.86.8",
@@ -5,7 +5,7 @@
import '@pezkuwi/react-components/i18n';
import { cleanup, fireEvent, render, waitForElementToBeRemoved } from '@testing-library/react';
import { cleanup, configure, fireEvent, getConfig, render, waitForElementToBeRemoved } from '@testing-library/react';
import React from 'react';
import { MemoryRouter } from 'react-router-dom';
import { ThemeProvider } from 'styled-components';
@@ -15,7 +15,7 @@ import { ApiCtxRoot } from '@pezkuwi/react-api';
import { statics } from '@pezkuwi/react-api/statics';
import { lightTheme } from '@pezkuwi/react-components';
import { KeyringCtxRoot } from '@pezkuwi/react-hooks/ctx/Keyring';
import { BIZINIKIWI_PORT } from '@pezkuwi/test-support/bizinikiwi';
import { assertDevNode, BIZINIKIWI_PORT } from '@pezkuwi/test-support/bizinikiwi';
import { MemoryStore } from '@pezkuwi/test-support/keyring';
import { WaitForApi } from '@pezkuwi/test-support/react';
import { settings } from '@pezkuwi/ui-settings';
@@ -53,19 +53,31 @@ const renderAccounts = () => {
);
};
// eslint-disable-next-line jest/no-disabled-tests
describe.skip('--SLOW--: Account Create', () => {
describe('--SLOW--: Account Create', () => {
// every step waits on a live chain and a page that draws once the api and
// keyring are ready, which takes longer than the 1s default on a busy machine
let asyncUtilTimeout: number;
beforeAll(async () => {
await assertDevNode();
asyncUtilTimeout = getConfig().asyncUtilTimeout;
configure({ asyncUtilTimeout: 20_000 });
});
// each render opens its own connection, and an open one keeps the process alive
afterEach(async () => {
cleanup();
await statics.api.disconnect();
});
afterAll(() => {
configure({ asyncUtilTimeout });
});
it('created account is added to list', async () => {
const { findByRole, findByTestId, findByText, queryByText } = renderAccounts();
// the page draws once the api and keyring are ready, later than the 1s default on a busy machine
fireEvent.click(await findByRole('button', { name: 'Account' }, { timeout: 20_000 }));
fireEvent.click(await findByRole('button', { name: 'Account' }));
const isSeedSavedCheckbox = await findByText('I have saved my mnemonic seed safely');
const hiddenCheckbox = isSeedSavedCheckbox as HTMLInputElement;
@@ -104,7 +116,7 @@ describe.skip('--SLOW--: Account Create', () => {
it('gives an error message when entering invalid derivation path', async () => {
const { findByRole, findByTestId, findByText } = renderAccounts();
fireEvent.click(await findByRole('button', { name: 'Account' }, { timeout: 20_000 }));
fireEvent.click(await findByRole('button', { name: 'Account' }));
const showAdvancedOptionsButton = await findByText('Advanced creation options', {});
@@ -7,7 +7,7 @@ import '@pezkuwi/react-components/i18n';
import type { ApiPromise } from '@pezkuwi/api';
import { cleanup, render } from '@testing-library/react';
import { cleanup, configure, getConfig, render } from '@testing-library/react';
import React, { Suspense } from 'react';
import { MemoryRouter } from 'react-router-dom';
import { ThemeProvider } from 'styled-components';
@@ -16,6 +16,7 @@ import { ApiCtxRoot } from '@pezkuwi/react-api';
import { statics } from '@pezkuwi/react-api/statics';
import { lightTheme } from '@pezkuwi/react-components';
import { createApi } from '@pezkuwi/test-support/api';
import { assertDevNode, BIZINIKIWI_PORT } from '@pezkuwi/test-support/bizinikiwi';
import { aliceSigner, MemoryStore } from '@pezkuwi/test-support/keyring';
import { WaitForApi } from '@pezkuwi/test-support/react';
import { execute } from '@pezkuwi/test-support/transaction';
@@ -23,8 +24,6 @@ import { BN } from '@pezkuwi/util';
import BountiesApp from './index.js';
const BIZINIKIWI_PORT = Number.parseInt(process.env.TEST_BIZINIKIWI_PORT || '30333');
const renderBounties = () => {
const memoryStore = new MemoryStore();
@@ -48,12 +47,22 @@ const renderBounties = () => {
);
};
// eslint-disable-next-line jest/no-disabled-tests
describe.skip('--SLOW--: Bounties', () => {
describe('--SLOW--: Bounties', () => {
// every step waits on a live chain and a page that draws once the api and
// keyring are ready, which takes longer than the 1s default on a busy machine
let asyncUtilTimeout: number;
beforeAll(async () => {
await assertDevNode();
asyncUtilTimeout = getConfig().asyncUtilTimeout;
configure({ asyncUtilTimeout: 20_000 });
});
let api: ApiPromise | undefined;
// both connections stay open otherwise, and keep the process alive
afterAll(async () => {
configure({ asyncUtilTimeout });
cleanup();
await api?.disconnect();
await statics.api.disconnect();
@@ -69,6 +78,6 @@ describe.skip('--SLOW--: Bounties', () => {
const { findByText } = renderBounties();
expect(await findByText(title, {}, { timeout: 20_000 })).toBeTruthy();
expect(await findByText(title)).toBeTruthy();
});
});
@@ -0,0 +1,26 @@
// Copyright 2017-2026 @pezkuwi/test-support authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { BIZINIKIWI_PORT } from './constants.js';
/**
* Fails at once when no dev node answers on BIZINIKIWI_PORT. Without it an
* api keeps reconnecting and a spec waits until the job's timeout.
*/
export async function assertDevNode (timeoutMs = 5_000): Promise<void> {
const url = `http://127.0.0.1:${BIZINIKIWI_PORT}`;
const res = await fetch(url, {
body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'system_chain' }),
headers: { 'Content-Type': 'application/json' },
method: 'POST',
signal: AbortSignal.timeout(timeoutMs)
}).catch((error: Error) => error);
if (res instanceof Error || !res.ok) {
const reason = res instanceof Error
? res.message
: `HTTP ${res.status}`;
throw new Error(`No dev node answers on ${url} (${reason}); the .slow. specs need one`);
}
}
@@ -1,4 +1,5 @@
// Copyright 2017-2026 @pezkuwi/test-support authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './assertDevNode.js';
export * from './constants.js';