Javascript 使用本机模块对方法进行jest测试

Javascript 使用本机模块对方法进行jest测试,javascript,react-native,unit-testing,jestjs,ts-jest,Javascript,React Native,Unit Testing,Jestjs,Ts Jest,我正在尝试为我的函数创建单元测试。 下面的方法“requestAuthorization”是swift中的一个方法,我通过RN的本机模块调用它。 我收到此错误“无法读取未定义的属性'requestAuthorization'” 如果该方法成功运行,它将解析回字符串“Authorized successfully!” 我怎样才能测试这个 index.ts(我的方法“requestAuthorization”在这里定义) 更新: 在我的swift方法“requestAuthorization”中,它

我正在尝试为我的函数创建单元测试。
下面的方法“requestAuthorization”是swift中的一个方法,我通过RN的本机模块调用它。
我收到此错误“无法读取未定义的属性'requestAuthorization'”
如果该方法成功运行,它将解析回字符串“Authorized successfully!” 我怎样才能测试这个

index.ts(我的方法“requestAuthorization”在这里定义)

更新:
在我的swift方法“requestAuthorization”中,它解析字符串“Authorized Successfully!”


首先,您需要模拟NativeModules,节点不是它应该运行的设备。测试没有意义,因为您只测试上面编写的代码,createMockFromModule会创建一个存根。我已经更新了我的问题。现在请检查。根据您的期望模拟NativeModules,就这样。不要模拟您正在测试的模块。像这个NativeModule这样的东西,顾名思义,是本机的。它应该是为运行应用程序的平台编译的。Jests测试在Node.js中运行,而不是在设备上运行。
const requestAuthorization = (
  read: [],
  write: [] = []
): Promise<boolean> => {

  const readAuth = read.reduce((obj, cur) => {
    return { ...obj, [cur]: true };
  }, {});

  const writeAuth = write.reduce((obj, cur) => {
    return { ...obj, [cur]: true };
  }, {});

  return NativeModules.MyHealthLibrary.requestAuthorization(writeAuth, readAuth);
};

const HealthKit = {
  requestAuthorization
}

export default HealthKit;

import { type } from '../authTypes';
import { NativeModules } from 'react-native';

jest.mock('react-native', () => {
    return {
        NativeModules: {
            MyHealthLibrary: {
                requestAuthorization: jest.fn(() => Promise.resolve())
            }
          }
        }
    })

const utils = jest.createMockFromModule('../index.ts').default;

utils.requestAuthorization = jest.fn((read, write) => {
    return NativeModules.MyHealthLibrary.requestAuthorization(read, write)    
});


test('healthkit permissions', () => {

        expect(utils.requestAuthorization.mock).toBeTruthy();

        let read = [type.heartRate]
        let write = [type.heartRate]
        expect(read).toEqual(["HKQuantityTypeIdentifierHeartRate"])
        expect(write).toEqual(["HKQuantityTypeIdentifierHeartRate"])

        await utils.requestAuthorization(read, write).then(result => {
                console.log("result:",result) //ALWAYS UNDEFINED
            })
});
  

jest.mock('../node_modules/react-native/Libraries/BatchedBridge/NativeModules', () => ({
    MyHealthLibrary: {
      requestAuthorization: jest.fn(() => Promise.resolve())
    },
  }));


 test('healthkit permissions', async() => {

            let read = [type.heartRate]
            let write = [type.heartRate]
            expect(read).toEqual(["HKQuantityTypeIdentifierHeartRate"])
            expect(write).toEqual(["HKQuantityTypeIdentifierHeartRate"])

            let result = await NativeModules.MyHealthLibrary.requestAuthorization(read, write)
                console.log("result:",result)   
//NOT PRINTING "Authorized Successfully!" INSTEAD PRINTING "undefined"
       
    });