Intern测试框架使用指南:从基础到高级技巧

Intern测试框架使用指南:从基础到高级技巧

intern A next-generation code testing stack for JavaScript. intern 项目地址: https://gitcode.com/gh_mirrors/in/intern

前言

Intern是一个功能强大的JavaScript测试框架,支持单元测试、功能测试和端到端测试。本文将深入探讨Intern的各种使用场景和技巧,帮助开发者充分利用这个框架进行高效测试。

浏览器测试配置

微软Edge Chromium测试

微软基于Chromium的新版Edge浏览器可以通过Intern进行测试。配置时需要注意:

  1. 使用"MicrosoftEdge"作为browserName
  2. 设置browserVersion"insider preview"
  3. 如需特定版本的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测试

  1. 禁用代码覆盖率

    • 移除配置中的coverage属性
    • 或通过命令行:intern coverage=
  2. 禁用浏览器特性检测

{
  "environments": {
    "browserName": "chrome",
    "fixSessionCapabilities": "no-detect"
  }
}

自定义Firefox配置

  1. 创建Firefox配置文件并打包为ZIP
  2. Base64编码配置文件
  3. 在配置中添加:
{
  "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;
  }
}

远程测试服务集成

  1. 配置测试套件
  2. 选择隧道服务(如BrowserStack)
  3. 提供认证凭据
  4. 设置目标环境
{
  "tunnel": "browserstack",
  "tunnelOptions": {
    "username": "your_username",
    "authToken": "your_auth_token"
  },
  "environments": [
    { "browserName": "chrome", "version": "latest", "platform": "MAC" }
  ]
}

程序化使用Intern

  1. 加载Intern:

    • Node环境:import intern from 'intern';
    • 浏览器环境:<script src="node_modules/intern/browser/intern.js"></script>
  2. 配置:

intern.configure({
  suites: ['tests/unit/a.js', 'tests/unit/b.js'],
  reporters: 'runner'
});
  1. 注册事件监听:
intern.on('testStart', test => {
  console.log(`${test.id} has started`);
});
  1. 运行测试: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进行项目测试。

intern A next-generation code testing stack for JavaScript. intern 项目地址: https://gitcode.com/gh_mirrors/in/intern

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢颜娜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值