Intern测试框架使用指南:从基础到高级技巧
前言
Intern是一个功能强大的JavaScript测试框架,支持单元测试、功能测试和端到端测试。本文将深入探讨Intern的各种使用场景和技巧,帮助开发者充分利用这个框架进行高效测试。
浏览器测试配置
微软Edge Chromium测试
微软基于Chromium的新版Edge浏览器可以通过Intern进行测试。配置时需要注意:
- 使用
"MicrosoftEdge"
作为browserName
- 设置
browserVersion
为"insider preview"
- 如需特定版本的WebDriver,可在
intern.json
中配置:
"tunnelOptions": {
"drivers": [
{ "name": "MicrosoftEdgeChromium", "version": "79.0.294.0" }
]
}
无头浏览器测试
Chrome无头模式:
{
"environments": [
{
"browserName": "chrome",
"goog:chromeOptions": {
"args": ["headless", "disable-gpu", "window-size=1024,768"]
}
}
]
}
Firefox无头模式:
{
"environments": [
{
"browserName": "firefox",
"moz:firefoxOptions": {
"args": ["-headless", "--window-size=1024,768"]
}
}
]
}
Chrome移动设备模拟
{
"environments": [
{
"browserName": "chrome",
"goog:chromeOptions": {
"mobileEmulation": {
"deviceName": "Pixel 2"
}
}
}
]
}
测试优化技巧
加速WebDriver测试
-
禁用代码覆盖率:
- 移除配置中的
coverage
属性 - 或通过命令行:
intern coverage=
- 移除配置中的
-
禁用浏览器特性检测:
{
"environments": {
"browserName": "chrome",
"fixSessionCapabilities": "no-detect"
}
}
自定义Firefox配置
- 创建Firefox配置文件并打包为ZIP
- Base64编码配置文件
- 在配置中添加:
{
"environments": [
{
"browserName": "firefox",
"moz:firefoxOptions": {
"profile": "UEsDBBQACAAIACynEk..."
}
}
]
}
测试编写方式
HTML页面测试
<!DOCTYPE html>
<html>
<head>
<script src="node_modules/intern/browser/intern.js"></script>
<script>
var registerSuite = intern.getPlugin('interface.object').registerSuite;
registerSuite('app/module', {
test1: function() {
// 测试代码
}
});
intern.configure({ reporters: 'html' });
intern.run();
</script>
</head>
<body></body>
</html>
非模块化代码测试
对于不支持模块系统的传统代码,使用plugins
配置按顺序加载:
{
"browser": {
"plugins": ["lib/jquery.js", "lib/plugin.jquery.js"]
}
}
高级测试场景
测试ES模块
Node环境:
{
"node": {
"plugins": "node_modules/babel-register/lib/node.js"
},
"instrumenterOptions": {
"esModules": true
}
}
浏览器环境(使用SystemJS):
{
"browser": {
"loader": {
"script": "systemjs",
"options": {
"map": {
"plugin-babel": "node_modules/systemjs-plugin-babel/plugin-babel.js",
"systemjs-babel-build": "node_modules/systemjs-plugin-babel/systemjs-babel-browser.js"
},
"transpiler": "plugin-babel"
}
}
},
"instrumenterOptions": {
"esModules": true
}
}
非CORS Web API测试
设置反向代理将特定请求转发到目标服务:
nginx配置示例:
server {
server_name proxy.example;
location /web-service/ {
proxy_pass http://www.web-service.example;
}
location / {
proxy_pass http://localhost:9000;
}
}
远程测试服务集成
- 配置测试套件
- 选择隧道服务(如BrowserStack)
- 提供认证凭据
- 设置目标环境
{
"tunnel": "browserstack",
"tunnelOptions": {
"username": "your_username",
"authToken": "your_auth_token"
},
"environments": [
{ "browserName": "chrome", "version": "latest", "platform": "MAC" }
]
}
程序化使用Intern
-
加载Intern:
- Node环境:
import intern from 'intern';
- 浏览器环境:
<script src="node_modules/intern/browser/intern.js"></script>
- Node环境:
-
配置:
intern.configure({
suites: ['tests/unit/a.js', 'tests/unit/b.js'],
reporters: 'runner'
});
- 注册事件监听:
intern.on('testStart', test => {
console.log(`${test.id} has started`);
});
- 运行测试:
intern.run();
测试初始化
同步初始化:
// setup.js
intern.config.suites.push('./some/other/suite.js');
异步初始化:
intern.on('beforeRun', () => {
return new Promise(resolve => {
// 异步代码
});
});
异常处理
控制全局错误和Promise拒绝的处理方式:
{
"warnOnUncaughtException": true,
"warnOnUnhandledRejection": /benign error pattern/
}
结语
Intern提供了丰富的功能和灵活的配置选项,可以满足各种JavaScript测试需求。通过合理配置和优化,可以显著提高测试效率和覆盖率。希望本文提供的技巧能帮助您更好地利用Intern进行项目测试。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考