小编Dau*_*eDK的帖子

模拟admin.firestore()。collection()。get()

与此[question] [1]相关,我正在尝试进行单元测试时模拟firestore。

我尝试模拟的代码如下所示:

const firestore = admin.firestore();
const users = await firestore.collection('users').get();
Run Code Online (Sandbox Code Playgroud)

而我尝试模拟它的过程如下:

const firestoreStub = sinon.stub();
Object.defineProperty(admin, 'firestore', {
  get: () => {
    return {
      collection: (path) => Promise.resolve({mocka: 'user'})
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用。

我创建了一个仓库(官方功能仓库的克隆),如果有帮助,请在此处给出整个示例。

javascript firebase google-cloud-functions google-cloud-firestore

5
推荐指数
1
解决办法
714
查看次数

允许读取Firestore文档(如果不存在)

在Firestore中,如果目标文档不存在,我将不允许阅读。我尝试了以下方法:

service cloud.firestore {
   match /databases/{database}/documents {

     match /reports/{report} {
        allow read: if !exists(/databases/$(database)/documents/reports/{report});
     }

   }
}
Run Code Online (Sandbox Code Playgroud)

它不起作用,响应为:Missing or insufficient permissions.

google-cloud-firestore firebase-security-rules

5
推荐指数
1
解决办法
301
查看次数

如何使用 CSS 定位有角度的材质步进器填充?

我正在尝试减少角材料步进器组件上的填充,因为我正在开发一个紧凑型:

在此输入图像描述

要删除此处的填充:

在此输入图像描述

在官方的角度材质文档中,他们指出您应该创建一个特定的选择器。我只是不知道该怎么做。我已经尝试过以下方法:

在chrome工具中,我找到了一个CSS类.mat-horizontal-stepper-header。我正在尝试将填充从 24 像素减少到 10 像素,如下所示:

.mat-horizontal-stepper-header {
  padding: 14px !important;
}
Run Code Online (Sandbox Code Playgroud)

这是行不通的。我在这里创建了一个Stackblitz来说明问题。

css angular-material2

5
推荐指数
1
解决办法
4664
查看次数

当别名用于特定文件时,如何将打字稿别名路径转换为Jest“ moduleNameMapper”?

我正在尝试在打字稿项目中配置Jest。

在这里,我们在tsconfig.json中使用路径别名,如下所示:

"baseUrl": ".",
"paths": {
  "@eddystone-shared/*": [ "../shared/*" ],
  "@eddystone-firebase-helpers/*": [ "src/helpers/firebase-helpers/*" ],
  "@eddystone-func-config": ["src/config/config"],
Run Code Online (Sandbox Code Playgroud)

所以他们像这样工作:

  1. 引用父目录中的所有文件,即
  2. 引用src子目录中的所有文件。
  3. 引用一个特定的文件

我在Jest github中发现,Jest moduleNameMapper是要使用的配置。我试过这样转换:

"moduleNameMapper": {
  "^@eddystone-shared/(.*)$": "<rootDir>../shared/$1",
  "^@eddystone-firebase-helpers/(.*)$": "<rootDir>/src/helpers/firebase-helpers/$1",
  "^@eddystone-func-config/(.*)$": "<rootDir>/src/config/config",
Run Code Online (Sandbox Code Playgroud)

但这行不通。问题是@eddystone-func-config别名。所以我的问题是:如何moduleNameMapper为特定文件创建条目?

typescript jest

5
推荐指数
1
解决办法
500
查看次数

如何检查 obj 是否属于 luxon 类型?

我正在为 Angular Material 编写日期适配器,如果提供的对象是 luxon DateTime,则需要一个返回布尔值的函数。

像这样(从那一刻起):

isDateInstance(obj: any): boolean {
    return moment.isMoment(obj);
  }
Run Code Online (Sandbox Code Playgroud)

到目前为止,我所拥有的是 - 这是否足够好?:

isDateInstance(obj: any): boolean {
      try {
          const luxonObject = DateTime.fromObject(obj);
          return luxonObject.isValid;
      } catch (error) {
          return false;
      }
  }
Run Code Online (Sandbox Code Playgroud)

luxon

5
推荐指数
1
解决办法
1028
查看次数

如何将 BSON 时间戳从 Mongo 变更流转换为日期?

我正在开始使用 Mongo 中的 Changestream。在我当前的设置中,缝合函数将更改日志事件插入修订集合中。但是,当我从集合中读取数据时,无法转换时间戳字段。我尝试过以下 2 次尝试:

1)管道

[
    {
        $match: {
            'documentKey._id': _id,
        },
    },
    {
        $sort: { _id: -1 },
    },
    {
        $addFields: {
            convertedDate: { $toDate: 'clusterTime' },
        },
    },
]
Run Code Online (Sandbox Code Playgroud)

但它给出了错误:Error parsing date string 'clusterTime'; 0: passing a time zone identifier as part of the string is not allowed 'c'; 6: Double timezone specification 'r'

2)bson时间戳类

import { Timestamp } from 'bson';
const asTimestampInstance = new Timestamp(v.clusterTime);
Run Code Online (Sandbox Code Playgroud)

但这里打字稿给了我错误:Expected 2 arguments, but got 1.ts(2554) index.d.ts(210, 30): …

mongodb

5
推荐指数
1
解决办法
3386
查看次数

如何从打字稿界面生成 MongoDB JSON 模式?

我的目标是提高 MongoDB 数据库中的数据质量 - 通过使用我的目标是通过使用JSON 模式验证。我们在项目中使用打字稿,并为我们所有的集合提供接口。

\n

所以我基本上正在寻找一种有效的方法;

\n

转换此接口

\n
import { ObjectId } from \'mongodb\';\n\nexport interface Category {\n  _id: ObjectId;\n  date: Date;\n  level: string |\xc2\xa0null;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

进入这个 JSON 模式

\n
export const CategoryJSONSchema = {\n  required: [\'_id\', \'date\', \'level\'],\n  additionalProperties: false,\n  properties: {\n    _id: { bsonType: \'objectId\' },\n    date: { bsonType: \'date\' },\n    level: { oneOf: [{ bsonType: \'null\' }, { bsonType: \'string\' }] }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

mongodb typescript mongodb-schema

5
推荐指数
1
解决办法
1399
查看次数

Firebase 功能的 Sourcemap 支持?

在打字稿中开发 firebase 函数时,我试图让 sourcemaps 工作。

在我的tsconfig.json文件中启用了源映射。

这生成了源映射。然后我将这一行包含在我的index.ts文件中:

import 'source-map-support/register';
Run Code Online (Sandbox Code Playgroud)

然后它似乎工作。这是否正确配置,以及source-map-support项目package.json文件?

firebase google-cloud-functions

4
推荐指数
1
解决办法
998
查看次数

我如何配置一个在大屏幕和小屏幕上都很好用的材料 cdk 覆盖位置策略?

如何配置在大屏幕和小屏幕上都很好用的材料 cdk 覆盖位置策略?

目标

我的目标是使用Angular 覆盖 CDK创建一个覆盖,遵循以下规则:

  • 切勿在视口外放置叠加层
  • 最大高度 300 像素
  • 位置叠加 y,优先级为顶部,居中底部。
  • 在高度低于 300 的屏幕上,使用可用高度。
  • 换句话说,没有最小高度。

什么有效

我已经完成了上述一些要求,正如您在此处看到的,定位在具有足够垂直空间(在本例中为 512px)的设备上效果很好:

在此处输入图片说明

破损的部分

但是,从下面的 gif 中可以看出,这不适用于垂直空间不足的小型设备(在本例中为 255px)。实际上,正如您从 GIF 中可以看出的那样,在其中两个案例中,它非常接近。位置是正确的,只是高度有偏差。

在此处输入图片说明

这里的目标是使用可用空间,如红色所示:

在此处输入图片说明

编码

我有一个堆栈闪电战,你可以在这里进行实验。

成分

openPopup(element: any) {
    const overlayRef = this.overlay.create({
      hasBackdrop: true,
      positionStrategy: this.overlay.position()
      .flexibleConnectedTo(element)
      .withLockedPosition()
      .withPositions([
        {
          panelClass: 'custom-panel1',
          originX: 'center',
          originY: 'center',
          overlayX: 'start',
          overlayY: 'top',
        },
        {
          panelClass: 'custom-panel2',
          originX: 'center',
          originY: 'center',
          overlayX: 'start',
          overlayY: 'center',
        },
        {
          panelClass: 'custom-panel3',
          originX: …
Run Code Online (Sandbox Code Playgroud)

angular-material angular-material2 angular angular-cdk

4
推荐指数
1
解决办法
3978
查看次数

我可以在nodejs中获取console.table的字符串值吗?

我正在为我的 Winston 记录器实现一种漂亮的格式,并且想知道是否可以使用 Node.js 方法console.table来获取“字符串”?

该方法是无效的,但是我可以以某种方式表示字符串吗?

const tableAsString = console.table([{foo: 'bar'}, {foo: 'bar2'}])
// This does not work, table as string is undefined...
Run Code Online (Sandbox Code Playgroud)

node.js

3
推荐指数
1
解决办法
466
查看次数