uni-app cli 自动化测试卡住超时报错
uni-app cli 自动化测试卡住超时报错
操作步骤
直接就是用官网的实例就跑不通
预期结果
测试正常执行
实际结果
测试卡住然后超时报错
bug描述
从官网下载的uniapp jest 自动化测试用例项目,让后本地编译到微信小程序,会报超时
cross-env UNI_PLATFORM=mp-weixin jest -i --detectOpenHandles
> my-project@0.1.0 dev:mp-weixin
> cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch --auto-port 9520
请注意运行模式下,因日志输出、sourcemap以及未压缩源码等原因,性能和包体积,均不及发行模式。若要正式发布,请点击发行菜单或使用cli发布命令进行发布
小程序各家浏览器内核及自定义组件实现机制存在差异,可能存在样式布局兼容问题,参考:https://uniapp.dcloud.io/matter?id=mp
- 开始编译当前项目至 mp-weixin 平台...
DONE Compiled successfully in 1566ms15:29:18
DONE Build complete. The dist\dev\mp-weixin directory is ready. Watching for changes...
FAIL src/test/index.test.js
● Test suite failed to run
Wait timed out after 240000 ms
at node_modules/licia/waitUntil.js:25:25
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 244.593s
Ran all test suites.
信息类型 | 版本号/详情 |
---|---|
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | 23H2 |
第三方开发者工具版本号 | 1.06.2405020 |
基础库版本号 | 3.5.4 |
项目创建方式 | CLI |
CLI版本号 | ^2.0.2-4020420240722003 |
// index.test.js
describe(“index.test.js”,()=>{
console.log(‘111’);
let page
console.log(‘222’);
beforeAll(async () => {
console.log(‘333’);
// 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象)
page = await program.reLaunch(’/pages/index/index’)
console.log(‘444’);
await page.waitFor(1000)
console.log(‘555’);
})
it('u-link', async () => {
// 检测首页u-link的文本内容
expect(await (await page.$('.hello-link')).text()).toBe('https://uniapp.dcloud.io/component/')
})
})
微信开发者工具 菜单【设置】【安全设置】,服务端口等是否开启?
已经开启了
解决了吗
在处理uni-app CLI自动化测试过程中遇到的卡住超时报错问题时,通常我们需要从测试脚本、测试环境配置以及测试框架本身来寻找解决方案。以下是一些可能帮助你解决该问题的代码示例和调整策略,但请注意,由于具体情况可能不同,这些代码可能需要根据你的项目环境进行调整。
1. 增加测试超时时间
如果你的测试脚本因为某些操作耗时较长而超时,可以尝试增加测试框架的超时设置。以Jest为例,可以在jest.config.js
文件中增加或调整testTimeout
选项:
module.exports = {
testTimeout: 30000, // 设置超时时间为30秒
// 其他配置...
};
2. 优化测试脚本
确保你的测试脚本中没有阻塞操作或者不必要的延迟。例如,使用async/await
确保异步操作正确完成:
test('example test', async () => {
const result = await someAsyncFunction();
expect(result).toBe('expectedValue');
});
3. 检查网络请求
如果你的测试涉及网络请求,确保请求在合理的时间内完成。可以使用mock工具如jest.mock()
来模拟网络请求,避免真实请求导致的超时:
jest.mock('axios', () => ({
get: jest.fn(() => Promise.resolve({ data: 'mocked response' })),
}));
test('fetch data', async () => {
const response = await axios.get('/some-url');
expect(response.data).toBe('mocked response');
});
4. 调整设备或模拟器性能
如果你在模拟器或真实设备上运行测试,设备的性能可能会影响测试执行时间。尝试在性能更好的设备上运行测试,或者优化你的应用以减少资源消耗。
5. 使用重试机制
对于偶尔出现的不稳定测试,可以考虑实现重试机制。虽然这不是直接解决超时问题的方法,但可以提高测试的稳定性:
const retry = (fn, retries = 3, delay = 1000) => {
return fn().catch(err => retries > 1 ? setTimeout(() => retry(fn, retries - 1, delay), delay) : Promise.reject(err));
};
test('retrying test', async () => {
await retry(() => someFlakyTestFunction());
});
结论
处理自动化测试超时问题通常需要对测试环境、测试脚本以及测试框架本身有深入的理解。上述方法提供了一些基本的调整策略,但具体情况可能需要更细致的调试和分析。如果问题依然存在,建议查看测试框架的文档或社区,寻找是否有已知的bug或优化建议。