dojo dragon main logo

功能测试

与单元测试加载和执行代码的流程不同,功能测试在浏览器中加载一个页面并测试应用程序的交互功能。

当要校验某个路由对应的应用程序输出内容,需要为对应的路由链接添加 id 属性,以便快速定位链接。

src/widgets/Menu.tsx

import { create, tsx } from '@dojo/framework/core/vdom';
import Link from '@dojo/framework/routing/ActiveLink';
import Toolbar from '@dojo/widgets/toolbar';

import * as css from './Menu.m.css';

const factory = create();

const Menu = factory(function Menu() {
	return (
		<Toolbar heading="My Dojo App!" collapseWidth={600}>
			<Link id="home" to="home" classes={[css.link]} activeClasses={[css.selected]}>
				Home
			</Link>
			<Link id="about" to="about" classes={[css.link]} activeClasses={[css.selected]}>
				About
			</Link>
			<Link id="profile" to="profile" classes={[css.link]} activeClasses={[css.selected]}>
				Profile
			</Link>
		</Toolbar>
	);
});

export default Menu;

在使用应用程序时,用户会单击 profile 链接,然后被导航到欢迎用户页面。可编写一个功能测试来验证此行为。

tests/functional/main.ts

const { describe, it } = intern.getInterface('bdd');
const { assert } = intern.getPlugin('chai');

describe('routing', () => {
	it('profile page correctly loads', ({ remote }) => {
		return (
			remote
				// 在本地的 node 服务器中加载 HTML 文件
				.get('../../output/dev/index.html')
				// 根据 id 找到超链接标签
				.findById('profile')
				// 单击链接
				.click()
				// 结束此操作
				.end()
				// 找到 h1 标签
				.findByTagName('h1')
				// 获取 h1 标签中的文本
				.getVisibleText()
				.then((text) => {
					// 核实 profile 页面中 h1 标签中的内容
					assert.equal(text, 'Welcome Dojo User!');
				})
		);
	});
});

当运行功能测试时,Dojo 会提供一个 remote 对象,它用于与页面交互。因为加载页面和与页面交互是异步操作,所以必须在测试中返回 remote 交互对象。

在命令行中执行功能测试:

dojo test --functional

这将会在构建机器中,将 HTML 页面加载到 Chrome 的 remote 实例中,,以测试交互功能。

功能测试是非常有用的,它能确保应用程序代码能在浏览器中按预期工作。

您可以阅读更多关于 Intern 功能测试 的内容。