5 javascript unit-testing firebase jestjs firebase-realtime-database
我的目的只是测试一个功能。我无法弄清楚如何正确模拟 firebase。我尝试使用 Jest 文档中的 axios 模拟来保留示例。我有以下代码:
音乐服务.js
import { initializeApp } from "firebase/app";
import "firebase/database";
const firebase = initializeApp({
apiKey: "<API_KEY>",
authDomain: "<PROJECT_ID>.firebaseapp.com",
databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
projectId: "<PROJECT_ID>",
storageBucket: "<BUCKET>.appspot.com",
messagingSenderId: "<SENDER_ID>",
});
export class MusicService {
static getAlbums() {
return firebase.database().ref("albums").once("value")
.then(snapshot => Object.values(snapshot.val()));
}
}
Run Code Online (Sandbox Code Playgroud)
音乐服务.test.js
import firebase from 'firebase/app';
import 'firebase/database';
import { MusicService } from './MusicService';
jest.mock('firebase/app');
jest.mock('firebase/database');
test("test", () => {
firebase.initializeApp.mockImplementation(() => {
database: jest.fn(() => {
return {
ref: jest.fn()
}
})
});
MusicService.getAlbums();
});
Run Code Online (Sandbox Code Playgroud)
我试图模拟 firebase.database。
test("test", () => {
firebase.mockImplementation(() => {
return {
database: {
}
}
});
MusicService.getAlbums();
});
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我收到错误消息:
类型错误:_app.default.mockImplementation 不是函数。
我不希望给出工作示例,而是你能告诉我,我到底应该模拟什么?整个 firebase 库或者我的函数开始的部分 - return firebase.database()
.
小智 5
我想通了。我应该只模拟那些模块,我要测试的一个函数,取决于。例如,我想测试getAlbums
功能。它使用initializeApp
从firebase/app
模块中导入的函数MusicService.js
。因此,当initializeApp
函数被调用时,它应该返回一个包含database
函数的对象,该对象又返回一个带有ref
和once
函数的对象。代码:
音乐服务.test.js。
import { MusicService } from "./FirebaseService";
jest.mock("firebase/app", () => {
const data = { name: "unnamed" };
const snapshot = { val: () => data };
return {
initializeApp: jest.fn().mockReturnValue({
database: jest.fn().mockReturnValue({
ref: jest.fn().mockReturnThis(),
once: jest.fn(() => Promise.resolve(snapshot))
})
})
};
});
test("getAlbums function returns an array", async () => {
const data = await MusicService.getAlbums();
expect(data.constructor).toEqual(Array);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3323 次 |
最近记录: |