跳到主要内容

单元测试

XBell 具备浏览器和 Node.js 代码单元测试的能力。

以测试一个 add 函数为目的,分别讲解如何使用浏览器和 Node.js 环境运行:

add.ts
export function add(a: number, b: number) {
return a + b;
}

Node.js

import { test } from 'xbell';
import { add } from './add';

test('nodejs example', ({ expect }) => {
expect(add(1, 1)).toBe(2);
});

Browser

import { test } from 'xbell';

test.browser('browser example', async ({ expect }) => {
/** 改函数内的代码块会运行在浏览器环境中 */

// 从浏览器环境中导入 add 函数
const { add } = await import('./add');

expect(add(1, 1)).toBe(2);
});

警告

以下用法将会报错:

import { test } from 'xbell';
// add 属于 nodejs 环境变量
import { add } from './add';

test.browser('bad case of browser', async ({ expect }) => {
// 在浏览器环境使用了 nodejs 环境的 add,将会报错 "add is not defined"
expect(add(1, 1)).toBe(2);
});

React

import { test } from 'xbell';

test('#react demo', ({ page }) => {
// create root element
await page.goto('https://my-custom.com', { mockHTML: '<div id="root"></div>' });

await page.evalute(async () => {
// for jsx program
const { default: React } = await import('react');
const { default: ReactDOM } = await import('react-dom');
const { default: App } = await import('./App');
ReactDOM.render(<App />, document.getElementById('root'));
});

await page.localByText('link').click()
});

You can see Adavance React to learn more.

Vue

import { test } from 'xbell';

test('#vue demo', ({ page }) => {
// create root element
await page.goto('https://my-custom.com', { mockHTML: '<div id="root"></div>' });

await page.evalute(async () => {
const { default: App } = await import('./App.vue');
const { createApp } = await import('vue');
createApp(App).mount('#app');
});

await page.localByText('link').click()
});