- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Jest 和模拟器测试 Firebase 函数,尽管这些测试可能来自竞争条件。所谓 flakey,我的意思是有时它们会通过,有时不会,即使在同一台机器上也是如此。
测试和函数是用 TypeScript 编写的,然后用 babel 转译。
Để ý:这只是其中一个 flakey 测试的示例。许多其他测试都是古怪的。解决方案最好不仅能解决这个案例,还能解决一般问题。
import { onProfilesWrite } from '../src/profiles/on-write'
import { initializeAdminApp } from '@firebase/rules-unit-testing'
const admin = initializeAdminApp({ projectId: 'projectId' }).firestore()
const wrappedFunction = testEnvironment.wrap(onProfilesWrite)
const profilePath = `profiles/${uid}`
const customerProfile = {
roles: ['customer'],
slug: 'slug',
image: 'image.png',
fullName: 'John Smith',
}
const publisherRoles = ['customer', 'publisher']
const publisherProfile = {
...customerProfile,
roles: publisherRoles,
}
const createChange = async (
before: Record | undefined,
changes: Record
) => {
const publisherStatsRef = admin.doc(profilePath)
if (before) await publisherStatsRef.set(before)
const beforeSnapshot = await publisherStatsRef.get()
await publisherStatsRef.set(changes, { merge: true })
const afterSnapshot = await publisherStatsRef.get()
return testEnvironment.makeChange(beforeSnapshot, afterSnapshot)
}
test('If user profile is created as a publisher, publisherDetails is created', async () => {
const change = await createChange(undefined, publisherProfile)
await wrappedFunction(change)
const snapshot = await admin.doc(`profileDetails/${uid}`).get()
const data = snapshot.data()
expect(data).toBeTruthy()
expect(data?.id).toBeTruthy()
expect(data?.slug).toBe(publisherProfile.slug)
expect(data?.profileImage).toBe(publisherProfile.image)
expect(data?.publisherName).toBe(publisherProfile.fullName)
expect(data?.music).toMatchObject([])
})
firebase emulators:exec \"jest functions/__tests__ --detectOpenHandles\" --only firestore
If user profile is created as a publisher, publisherDetails is created
expect(received).toBeTruthy()
Received: undefined
46 | const snapshot = await admin.doc(`profileDetails/${uid}`).get()
47 | const data = snapshot.data()
> 48 | expect(data).toBeTruthy()
| ^
49 | expect(data?.id).toBeTruthy()
50 | expect(data?.slug).toBe(publisherProfile.slug)
51 | expect(data?.profileImage).toBe(publisherProfile.image)
import * as functions from 'firebase-functions'
// initializes the admin app, then exports admin.firestore
import { firestore } from '../admin'
const database = firestore()
const createPublisherId = async (): Promise => {
let id = ''
const MAX_NUMBER = 1000000
while (id === '') {
const temporaryId = String(Math.ceil(Math.random() * MAX_NUMBER))
const snapshot = await firestore()
.collection('publisherDetails')
.where('sku', '==', temporaryId)
.limit(1)
.get()
if (snapshot.empty) id = temporaryId
}
return id
}
export const createPublisherDetails = async (
newData: firestore.DocumentData,
uid: string
): Promise => {
const id = await createPublisherId()
await database.doc(`publisherDetails/${uid}`).set(
{
id,
slug: newData.slug,
publisherName: newData.fullName,
profileImage: newData.image,
music: [],
},
{ merge: true }
)
}
export const onProfilesWrite = functions.firestore.document('profiles/{uid}').onWrite(
async (change): Promise => {
const { id: uid } = change.after
const oldData = change.before.data()
const newData = change.after.data()
nếu như (
newData?.roles?.includes('publisher') &&
(typeof oldData === 'undefined' || !oldData.roles?.includes('publisher'))
)
await createPublisherDetails(newData, uid)
}
)
@typescript-eslint/no-floating-promises
)随着评论的涌入,无论是问题还是建议,我都会继续更新这篇文章。
1 Câu trả lời
将您的测试部分更改为如下:
test('If user profile is created as a publisher, publisherDetails is created', async () => {
const change = await createChange(undefined, publisherProfile)
await wrappedFunction(change)
const documentObject = await admin.doc(`profileDetails/${uid}`)
const snapshot = await documentObject.get()
const data = snapshot.data()
expect(data).toBeTruthy()
expect(data?.id).toBeTruthy()
expect(data?.slug).toBe(publisherProfile.slug)
expect(data?.profileImage).toBe(publisherProfile.image)
expect(data?.publisherName).toBe(publisherProfile.fullName)
expect(data?.music).toMatchObject([])
})
原因是在您的测试区域中,您对 await 的使用有点不正确(正在等待的对象上的函数链接在同一调用行中是一个很大的禁忌)
关于node.js - 使用 Jest 测试 firebase 函数时的 Flakey 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66357630/
Tôi đang tìm hiểu tất cả các công nghệ cần thiết để xây dựng Ứng dụng trang đơn (SPA). Tóm lại, tôi muốn triển khai ứng dụng của mình dưới dạng các lớp riêng biệt, trong đó giao diện người dùng giao tiếp với giao diện quản trị chỉ bằng các dịch vụ web API (json qua socket.io). Phần đầu về cơ bản là
Khi tôi nhìn thấy ngày được lưu trữ trong cơ sở dữ liệu của mình. Đây là điều bình thường. Ngày tháng và thời gian chỉ có vậy. Nhưng khi tôi chạy yêu cầu get để lấy dữ liệu. Định dạng này khác với định dạng được lưu trữ trong cơ sở dữ liệu. Tại sao điều này lại xảy ra? Câu trả lời hay nhất tôi nghĩ bạn có thể
Hiện tại, câu hỏi này không phù hợp với định dạng Hỏi & Đáp của chúng tôi. Chúng tôi mong đợi câu trả lời được hỗ trợ bởi các sự kiện, tài liệu tham khảo hoặc chuyên môn, nhưng câu hỏi này có thể gây ra tranh luận, tranh cãi, thăm dò ý kiến hoặc thảo luận mở rộng. Nếu bạn cảm thấy vấn đề này có thể được cải thiện và có thể mở lại, hãy truy cập
Tôi đang cố gắng triển khai một số mã bằng backbone.js và hogan.js (http://twitter.github.com/hogan.js/) Hogan.js được phát triển
Tôi đang tạo một ứng dụng web bằng Backbone.js, Node.js và Express.js và tôi muốn thêm chức năng cho người dùng (đăng nhập, đăng xuất, hồ sơ, hiển thị nội dung liên quan đến người dùng). Tôi dự định sử dụng Passport
đóng cửa. Câu hỏi này cần được hỏi một cách tập trung hơn. Hiện tại không chấp nhận câu trả lời. Bạn có muốn cải thiện điều này không? Cập nhật câu hỏi để tập trung vào một vấn đề duy nhất bằng cách chỉnh sửa bài đăng này. Đã đóng 8 năm trước. Cải thiện câu hỏi này
Tôi đang cố gắng tải dữ liệu trong NodeJS rồi chuyển nó sang ExpressJS để hiển thị biểu đồ d3 trên trình duyệt. Tôi biết tôi có thể tải dữ liệu theo cách này - https://github.com/mbostock/q
Trong node.js, tôi thấy có 3 tên tệp giống nhau để mô tả điểm vào chính của ứng dụng: Khi sử dụng gói express-generator, tệp app.js được tạo làm điểm vào chính cho ứng dụng được tạo. Bởi n
Gần đây tôi có cơ hội xem lớp học tuyệt vời của John Papa về cách xây dựng ứng dụng trang đơn. Tôi muốn nó. Nó liên quan đến mọi khía cạnh của ứng dụng phía máy chủ và phía máy khách. Tôi thích phía khách hàng hơn. Trong quá trình triển khai, ông Papa có lớp sau ở phía máy khách:
Hiện tại, câu hỏi này không phù hợp với định dạng Hỏi & Đáp của chúng tôi. Chúng tôi mong đợi câu trả lời được hỗ trợ bởi các sự kiện, tài liệu tham khảo hoặc chuyên môn, nhưng câu hỏi này có thể gây ra tranh luận, tranh cãi, thăm dò ý kiến hoặc thảo luận mở rộng. Nếu bạn cảm thấy vấn đề này có thể được cải thiện và có thể mở lại, hãy truy cập
Tôi là người mới học đồ họa và cần trợ giúp để hiểu chức năng của nhiều thư viện javascript 2D. . . Tôi nhận được gì từ Pixi.js mà tôi không nhận được từ các thư viện dựa trên Canvas như Konva? Tôi đến từ Konva
Tôi đang cố gắng xây dựng một số mã ÍT HƠN (thông qua ember-cli-less) vào một tệp CSS. 1) https://almsaeedstudio.com/ Tệp AdminLTE LESS 2) Bo
Đang cố gắng xem tất cả các phiên của tất cả người dùng đã đăng nhập trong Express Passport và hy vọng cũng có thể xem được người dùng hiện đang đăng nhập. Cách tốt nhất và nhanh nhất là gì? Tôi đang nghĩ có lẽ tôi có thể làm điều này khi đăng nhập và đưa cơ sở dữ liệu mô hình người dùng "trực tuyến"
Tôi có một ứng dụng React nhưng tôi cần chạy một số mã js phía máy khách sau khi một thành phần tải xong. Sau khi hàm render hoàn tất và được tải, cách tốt nhất để chạy js tương tác với DOM là gì, chẳng hạn như $('div').mixItUp() . Phải
Vui lòng cho tôi biết cách tải tệp lên máy chủ express.js phía máy khách bằng bodyparser.raw() // ... onFilePicked(file) { const url = 'upload/a
Tôi đang cố gắng di chuyển từ Grunt sang Gulp. Dự án chạy tốt trên Grunt, vậy nên có lẽ tôi đã làm sai điều gì đó trong Gulp. Mọi tác vụ khác đều hoạt động ngoại trừ tập lệnh. Tôi mệt mỏi khi phải thêm và chú thích các phần rồi. Tôi liên tục nhận được những điều bất ngờ
Tôi đang cố gắng đổi tên trang web của mình. Không tìm thấy nơi tôi có thể đặt tiêu đề hoặc tên ứng dụng. Câu trả lời hay nhất Bạn có thể tạo bất kỳ tệp nào trong thư mục config/, ví dụ config/app.js với nội dung sau: module.expor
Sau nhiều năm phát triển PHP/MySQL trên máy chủ, tôi đang cố gắng khám phá các công nghệ mới để xây dựng các ứng dụng web hiện đại. Tôi đang cố gắng sắp xếp tất cả nội dung JavaScript và nếu tôi hiểu rõ, một giải pháp hiệu quả có thể là phục vụ
Tôi mới làm quen với Nodejs. Tôi có app.js và index.js trong thư mục tuyến đường. Tôi có một ứng dụng.use(multer....). Tôi cũng đã định nghĩa app.post('filter-re
Tôi đang sử dụng mẫu Angular-seed để xây dựng ứng dụng của mình. Ban đầu, tôi đặt toàn bộ mã JavaScript của mình vào một tệp, main.js. Tệp này chứa khai báo mô-đun, bộ điều khiển, chỉ thị, bộ lọc và
Tôi là một lập trình viên xuất sắc, rất giỏi!