Я создаю приложение React Native с помощью TypeScript.Я использую response-native-firebase для своих уведомлений.Кроме того, я использую Jest и Enzyme для своих модульных тестов.
У меня есть следующая функция-обертка для проверки прав пользователей:
export const checkPermissions = (): Promise<boolean> =>
new Promise((resolve, reject) => {
firebase
.messaging()
.hasPermission()
.then(enabled => {
if (enabled) {
resolve(enabled);
} else {
firebase
.messaging()
.requestPermission()
.then(resolve)
.catch(reject);
}
});
});
Теперь я хочу проверить, вызывается ли функция
Вот тест, который я написал:
import * as firebase from "react-native-firebase";
import { checkPermissions } from "./notificationHelpers";
jest.mock("react-native-firebase");
describe("checkPermissions", () => {
beforeEach(async done => {
jest.resetAllMocks();
await checkPermissions();
done();
});
it("should call firebase.messaging().hasPermission()", () => {
expect(firebase.messaging().hasPermission).toHaveBeenCalledTimes(1);
});
});
Это выдает ошибку:
FAIL app/services/utils/core/notificationHelpers/notificationHelpers.test.ts
● Test suite failed to run
RNFirebase core module was not found natively on iOS, ensure you have correctly included the RNFirebase pod in your projects `Podfile` and have run `podinstall`.
See http://invertase.link/ios for the ios setup guide.
Error: RNFirebase core module was not found natively on iOS, ensure you have correctly included the RNFirebase pod in your projects `Podfile` and haverun `pod install`.
Так что мне кажется, что модули, которые используют собственный код, могут 'Это просто с помощью авто-насмешек.
Так что я попытался сделать это вручную.Внутри папки __mocks__
, которая находится в моем корневом проекте рядом с node_modules
, я создал файл с именем react-native-firebase.ts
, который выглядит следующим образом:
const firebase = {
messaging: jest.fn(() => ({
hasPermission: jest.fn(() => new Promise(resolve => resolve(true)))
}))
};
export default firebase;
Но этот код также не работает, потому что firebase.messaging
якобы не определено.
Как можно было бы проверить этот материал?10
РЕДАКТИРОВАТЬ: Ничего себе, насмешка, кажется, полностью сломан в RN 0.57.x : (