小编nor*_*orr的帖子

在浏览器中禁用系统中安装的字体

例如,我在Windows中安装了Open Sans字体,并且在我的网站中也嵌入了谷歌字体.如果我忘了实施谷歌字体,那么无论如何我可以在我的网站上看到字体,因为我已将它安装在系统中,但我的访问者没有.如何测试字体,忽略系统字体?

我试图在chrome/firefox或plugins中找到配置中的一些选项,以便在浏览器中逐步禁用系统字体,但我找不到任何东西.我想在Photoshop中使用已安装的字体,但不能在浏览器中使用.

抱歉英文不好.问候

photoshop firefox fonts google-chrome webfonts

9
推荐指数
1
解决办法
1391
查看次数

如何对 Cypress 6 中的所有测试使用全局拦截?

我想测试我网站的每个页面(Vue/Nuxt),但 API 调用应该被模拟。

为此,有拦截()函数(以前的赛普拉斯版本中的路由()):

主页.spec.js:

describe('home page', () => {
  before(() => {
    cy.intercept('**/user-data', { fixture: 'user.json' })
    cy.visit('http://localhost:8080')
  })

  it('renders header, () => {
      cy.contains('#header', 'test');
  });

  // some other tests for homepage
});
Run Code Online (Sandbox Code Playgroud)

很酷,它可以工作,但是我在每个页面上都有这个特定的 API 调用(获取记录的用户信息)。我不想在每个测试文件中重复此拦截代码,例如 contact.spec.js。我找不到全局设置此拦截的方法?嘲笑 axios 的正确方法是什么?

vue.js nuxt.js cypress

9
推荐指数
1
解决办法
6638
查看次数

Lerna / Nx / Turborepo 或其他非 js 应用程序的 monorepo 系统 (php)

我有/frontend(JS/Vue)和/backend(PHP)的存储库docker-compose.yml用于开发。但现在我需要添加另一个 JS 前端,该前端将共享一些组件、库等。我不想重复代码,所以我发现我可以使用许多工具来实现此目的,例如lernanxturborepo,用于使用共享包管理 monorepo。

问题是我发现的所有教程和示例存储库都基于 100% JS 存储库,例如前面的 React + 后面的 Nest 等。

所以问题-用于前。nx在具有多种语言的存储库上有意义,只是为了在 JS 包上利用它?如果是,目录结构应该是什么样子?或者也许有更好的 monorepo 工具是为多种语言设计的,而不仅仅是 JS?

javascript lerna monorepo nrwl-nx

8
推荐指数
1
解决办法
3758
查看次数

如何检查非支持枚举是否包含大小写?

我有基本枚举

enum Fruit
{
  case APPLE;
  case ORANGE;
  case BANANA;
}
Run Code Online (Sandbox Code Playgroud)

以及一些使用该枚举进行键入的函数:

function eatFruit (Fruit $fruit)
{
  // do stuff
}
Run Code Online (Sandbox Code Playgroud)

和内容未知的变量

$fruit = $_POST['fruit']; // user choosed "MILK"
if (?????) { // how to check if it's fruit?
  eatFruit($fruit); // this should not be executed
}
Run Code Online (Sandbox Code Playgroud)

我在文档中找不到检查枚举是否包含特定情况的简单方法。

像这样的支持枚举是可能的

enum Fruit
{
  case APPLE = 'APPLE';
  case ORANGE = 'ORANGE';
  case BANANA = 'BANANA';
}

Fruit::from('');
Fruit::tryFrom('');
Run Code Online (Sandbox Code Playgroud)

这将起作用,但from在我的第一个示例中的非支持枚举上不存在。

Fatal error: Uncaught Error: Call to undefined method Fruit::from()
Run Code Online (Sandbox Code Playgroud)

php enums php-8.1

7
推荐指数
1
解决办法
1万
查看次数

普通 JS 或 Lodash - 用其他对象的值替换对象值

我有两个对象:

let first = {
   a: 'John',
   b: 22,
   c: 'example'
}

let second = {
   b: 55,
   d: 'demo'
}
Run Code Online (Sandbox Code Playgroud)

我只想将第二个对象中已有的项目替换为第一个对象。结果应如下所示(因此仅应更改 b 项,并忽略新的 d 项):

{
   a: 'John',
   b: 55, // changed
   c: 'example'
}
Run Code Online (Sandbox Code Playgroud)

合并将不起作用,因为它还会添加新项目。我可以使用 foreach 但我相信对此应该有一个简短的答案。我已经在我的项目中使用了 lodash,所以我可以使用那里的函数,但我找不到任何用于此目的的函数。有没有?

javascript ecmascript-6 lodash

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

__construct 参数内的类可见性(私有) - 这是有效的 php 代码吗?

我正在看别人的代码,我不明白。这是类的示例:

class ImageService
{
   public function __construct(
       private ImageTransformer $imageTransformer,
       private PostService $postService
   ) {

   }

   // other methods here
}
Run Code Online (Sandbox Code Playgroud)

由于参数内的“私有”,IDE 在 _construct 下显示错误。我知道在 PHP 8 中有联合类型,但我找不到任何关于在类内部而不是在构造函数内部使用“private”或“public”的信息,以及它应该做什么。我认为这是错字,它应该在类内部,但多个类是这样创建的。这是有效的代码还是有人不知道他在做什么?

php php-8

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

我应该同时使用 Cypress 和 Jest 吗?

我同时学习 Jest 和 Cypress。我知道他们不是直接竞争对手,因为 Cypress 专注于 E2E,而 Jest 专注于单元测试。现在,我已经在我的项目中实现了 Jest 和 Cypress,并进行了很少的测试。

但实际上大多数事情我都可以在 Cypress 和 Jest 中测试,而且我经常很难决定用什么来编写我的测试。与单个测试库相比,它也更难维护。

我想知道 - Cypress(或替代品)和 Jest(或替代品)一起使用的频率如何?使用两者真的是标准和良好的做法吗?或者大多数开发人员/团队坚持单一的解决方案,这很好?

vue.js jestjs cypress

5
推荐指数
2
解决办法
3291
查看次数

对于字符串或数字等简单变量,ref 与shallowRef 比较

我知道这shallowRef对于资源来说更轻,因为它只监视数组键的更改或直接值的更改。例如,它不会观察对象字段的深处。凉爽的。

但是字符串或数字呢?使用这些shallowRef替代品有意义吗?ref有影响吗?

或者字符串的 ref 默认是浅的?

我的想法是 - 也许最好始终用于shallowRef所有数据,并ref仅在真正需要时将其更改为正常(例如带有对象的数组)。这样,我就不会ref在不需要的时候错误地使用更多消耗资源的资源。

vue.js vuejs3

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

在 Laravel 的 withCount() 方法中使用 DISTINCT

使用 Laravel/Lumen eloquent 我可以得到这样的计数关系:

User::withCount('views')->get();
Run Code Online (Sandbox Code Playgroud)

这将使用 SQL

select `users`.*, (select count(*) from `views` where `users`.`id` = `views`.`user_id`) as `views_count` from `users`
Run Code Online (Sandbox Code Playgroud)

并返回所有具有 views_count 属性的模型,太好了。

但我需要用唯一 IP 列计算这些视图。在这个查询中,我可以像这样简单地用 count(DISTINCT ip) 替换 count(*):

select `users`.*, (select count(DISTINCT ip) from `views` where `users`.`id` = `views`.`user_id`) as `views_count` from `users`
Run Code Online (Sandbox Code Playgroud)

并且在 phpMyAdmin 中它返回良好的结果。但是如何在 Laravel eloquent 中实现这一点呢?我找不到任何使用自定义列进行计数的方法。我可以通过这样的查询函数传递数组:

User::withCount(['views' => function ($q) { // what there? }])->get();
Run Code Online (Sandbox Code Playgroud)

但现在我只能通过 where 条件,不能以任何方式使用 Distinct。

我知道我可以先获取模型,然后使用 distinct 和 count 或 groupby 进行 foreach 但我需要保持这个单一的查询,快速而简单。如果我可以在原始 SQL 中轻松实现这一点,那么我也应该以某种方式在 Laravel 中做到这一点。如果需要,我可以使用一些自定义的 eloquent 方法,因为我将在应用程序的许多地方使用这个唯一计数。 …

php mysql laravel eloquent lumen

4
推荐指数
2
解决办法
2266
查看次数

Cypress 等待转换完成(等待正确的宽度)

我有菜单和汉堡按钮可以切换它,并且想测试这种行为。但是,菜单并没有完全消失,只是在隐藏时变得更薄(只有图标可见),所以我不能只测试它是否可见,因为它总是可见。

因此,我通过invoke('width')这样的方式检查尺寸:

cy.get('[data-test="sidebar"]')
  .invoke('width')
  .should('be.above', 200)
cy.get('[data-test="sidebar-toggle"]')
  .click()
cy.get('[data-test="sidebar"]')
  .invoke('width')
  .should('be.below', 100)
Run Code Online (Sandbox Code Playgroud)

但我收到错误ResizeObserver loop limit exceeded,因为它在单击后不等待菜单转换完成。所以我只是添加了wait(500)之后click()现在它可以工作了。但这不是有点黑客吗?现在我需要为每个转换设置正确的延迟,或者总是设置一个适用于所有转换的很长的延迟,但这浪费了测试时间。

是否有任何简单的通用方法告诉 Cypress 等待我的宽度达到应有的宽度,而不是立即放弃?

编辑:我对 wait() 解决方案的看法是错误的,它并没有真正的帮助。错误可能与转换无关。无需使用已接受答案中更改的代码 -invoke有效。但是这个关于忽略错误的答案的解决方案是正确的 - 关于此错误有多个问题,并且可以安全地忽略。答案如此简短 - 只需忽略此异常即可。它可以不放在 test 中,而是放在 support/index.js 中,这样它就可以在全球范围内工作。

animation cypress resize-observer

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

TypeScript - 为什么 array .includes() 期望 searchElement 为“从不”类型?

我有一个对象,其中每个字段都是字符串数组。我还有字符串变量,它只能具有基于对象中数组值的值。

现在我想检查这个字符串属于哪个数组(哪个对象字段)。我只是通过简单地使用来做到这一点includes(),代码工作正常,但由于某种原因 TS 抱怨。即使某个数组可以具有某些值,但它“从不”对我除外。我简化了代码以仅显示 TS 问题。

const demo = {
  a: ['value1', 'value2'],
  b: ['value3'],
} as const

let demoValue: typeof demo[keyof typeof demo][number]  // possible "value1" "value2" "value3"
demoValue = 'value3' // some user interaction

const test = (parent: keyof typeof demo, value: typeof demoValue) => {
  console.log(demo[parent].includes(value)) // "type 'string' is not assignable to type 'never'"
}

test('a', 'value2') // ok
test('WRONG', 'value2') // there is TS error, so ok
test('a', 'WRONG') // there is TS …
Run Code Online (Sandbox Code Playgroud)

typescript

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

为Laravel 5.5中的所有模型创建自定义查询构建器方法(查询范围)

我有多个带有时间戳的模型。我经常使用whereDate获取今天和昨天的所有行,如下所示:

ModelName::whereDate('created_at', now()->today())->get();
ModelName::whereDate('created_at', now()->yesterday())->get();
Run Code Online (Sandbox Code Playgroud)

我想让它更短,更简单,例如:

ModelName::today()->get();
ModelName::yesterday()->get();
Run Code Online (Sandbox Code Playgroud)

我找不到执行此操作的任何方法,因此我在文档中发现可以创建自己的“作用域”。问题是,我可以为指定的模型制作模型,但是找不到为所有模型全局制作模型的方法。现在,我需要将此作用域方法粘贴到每个模型类中。这行得通,但是我需要在每个模型类中重复此代码,所以我确定这不是一个好方法。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ModelName extends Model
{


    /**
     * Custom scope (query builder method) to easy return all items from today
     *
     * @param \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeToday($query)
    {
        return $query->whereDate('created_at', now()->today());
    }


    /**
     * Custom scope (query builder method) to easy return all items from yesterday
     *
     * @param \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeYesterday($query)
    {
        return $query->whereDate('created_at', now()->yesterday()); …
Run Code Online (Sandbox Code Playgroud)

scope laravel laravel-5.5

2
推荐指数
1
解决办法
3005
查看次数