uni-app UTS中,调用类里面的返回参数为promise类型的函数会报 UTS: targetFunction does not exists 错误

发布于 1周前 作者 caililin 来自 Uni-App

uni-app UTS中,调用类里面的返回参数为promise类型的函数会报 UTS: targetFunction does not exists 错误

开发环境 版本号 项目创建方式
Windows 10.0.19045 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:4.29

手机系统:Android

手机系统版本号:Android 11

手机厂商:小米

手机机型:红米note9 pro

页面类型:vue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

操作步骤:

在类中定义两个实例方法

export class Demo {  
  constructor() { }  
  test1() : Promise<boolean> {  
    console.log('test1')  
    return Promise.resolve(true);  
  }  
  test2() : void {  
    console.log('test2')  
  }  
}  
export function test3() : Promise<boolean> {  
  console.log('test3')  
  return Promise.resolve(true);  
}

在页面中调用:

import {  
    Demo,  
    test3  
  } from '@/uni_modules/promise-test'  
  let demo = null;  
  export default {  
    data() {  
      return {}  
    },  
    onLoad() {  
      demo = new Demo();  
    },  
    methods: {  
      handleTest1() {  
        demo.test1();  
      },  
      handleTest2() {  
        demo.test2();  
      },  
      handleTest3() {  
        test3();  
      }  
    }  
  }

预期结果:

17:22:07.555 test1 at uni_modules/promise-test/utssdk/app-android/index.uts:4 17:22:08.386 test2 at uni_modules/promise-test/utssdk/app-android/index.uts:8 17:22:08.840 test3 at uni_modules/promise-test/utssdk/app-android/index.uts:12


实际结果:

17:22:07.555 UTS: targetFunction does not exists
17:22:08.386 test2 at uni_modules/promise-test/utssdk/app-android/index.uts:8
17:22:08.840 test3 at uni_modules/promise-test/utssdk/app-android/index.uts:12

bug描述:

uts:调用类里面的返回参数为promise类型的函数会报 UTS: targetFunction does not exists 错误
单独导出的方法没这个问题,类中的实例方法存在这个问题


13 回复

提供一个可以复现问题的最简示例,我确认一下


已上传,麻烦看一下

这是复现工程

遇到同样的bug,希望官方能尽快修复

我也遇到了这个问题,请问这个bug修复了吗?

回复 1***@qq.com: 还没发布,发布会更新ask状态

解决了吗??? UTS: targetFunction not exists

最新alpha版已修复

我也遇到了UTS: targetFunction not exists promise换成any就没问题,但肯定是需要promise 尽快修复吧

提问者遇到的问题已修复。你遇到的问题 提交个示例吧 我看看

uni-app UTS(Uni Test Suite)中,如果你遇到调用类里面的返回 Promise 类型的函数时报告 UTS: targetFunction does not exist 错误,这通常意味着 UTS 框架未能正确识别或调用该函数。这种情况可能是由于测试环境的配置问题、函数可见性问题或者测试代码编写不正确导致的。

以下是一个简单的示例,展示如何在 uni-app 中定义一个返回 Promise 的类方法,并编写相应的 UTS 测试代码。

1. 定义类和方法

首先,我们定义一个类 MyService,其中包含一个返回 Promise 的方法 fetchData

// services/MyService.js
class MyService {
    fetchData() {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('Data fetched');
            }, 1000);
        });
    }
}

module.exports = MyService;

2. 编写 UTS 测试代码

接下来,我们编写 UTS 测试代码来测试 fetchData 方法:

// test/MyService.test.js
const MyService = require('@/services/MyService');

describe('MyService Test', () => {
    it('should fetch data successfully', async () => {
        const service = new MyService();
        const result = await service.fetchData();
        expect(result).toBe('Data fetched');
    });
});

3. 确保测试环境配置正确

确保你的 uni-app 项目已经正确配置了 UTS,并且测试脚本能够访问到你的项目文件。你可能需要在 package.json 中添加或更新测试脚本,例如:

"scripts": {
    "test": "cross-env NODE_ENV=test jest --config test/jest.config.js"
}

同时,确保你的 jest.config.js(或其他测试配置文件)正确设置了模块解析路径和转换规则,以便 Jest 能够理解你的项目结构。

4. 运行测试

最后,运行你的测试命令,例如:

npm test

如果一切配置正确,你应该能够看到测试通过,而不会遇到 UTS: targetFunction does not exist 错误。

这个示例展示了如何在 uni-app 中定义和测试返回 Promise 的类方法。如果仍然遇到问题,请检查你的测试环境配置、函数路径和可见性设置。

回到顶部