私はテストが初めてで、Jest を使用してドキュメント更新呼び出しを偽造しようとしています。そのために、react-native-testing-library と react-native-firebase を使用しています。
以下は私のテストスイートです。入力が 1 つあり、その値を変更するときは、ドキュメントを更新する必要があります
import firestore from "@react-native-firebase/firestore"
jest.mock("@react-native-firebase/firestore", () => {
return () => ({
collection: jest.fn(() => ({
doc: jest.fn(() => ({
update: jest.fn(),
})),
})),
});
});
describe("<EditInfosStudy>", () => {
const willSave = true;
const setDidChanged = jest.fn();
test("will update", async () => {
const { getByTestId } = render(
<EditInfosStudy willSave={willSave} setDidChanged={setDidChanged} />
);
const input = getByTestId("EditInfosStudy_TextInput");
fireEvent.changeText(input, "study text");
expect(input.props.value).toBe("study text");
// expect(firestore().collection('collection').doc('doc').update({})).toHaveBeenCalled()
// this is where i'm stuck
});
});
テストを実行した後、Jest は関数 (以下) から console.log を示し、ドキュメントが更新され、テストに合格したことを確認します。
私が理解していないのは、expect メソッドexpect(firestore()…)
を使用して最後の行でドキュメントが更新されたかどうかを確認する方法です。モック部分全体で本当に混乱しています。どんな助けも大歓迎です!
belove は呼び出される関数です:
if (localChange && willSave) {
(async () => {
try {
await firestore()
.collection("users")
.doc(user.uid)
.update({ study });
setUser({ study });
console.log("study updated");
} catch (err) {
console.error(err);
}
})();
}