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"
});