例如,我在Windows中安装了Open Sans字体,并且在我的网站中也嵌入了谷歌字体.如果我忘了实施谷歌字体,那么无论如何我可以在我的网站上看到字体,因为我已将它安装在系统中,但我的访问者没有.如何测试字体,忽略系统字体?
我试图在chrome/firefox或plugins中找到配置中的一些选项,以便在浏览器中逐步禁用系统字体,但我找不到任何东西.我想在Photoshop中使用已安装的字体,但不能在浏览器中使用.
抱歉英文不好.问候
我想测试我网站的每个页面(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 的正确方法是什么?
我有/frontend
(JS/Vue)和/backend
(PHP)的存储库docker-compose.yml
用于开发。但现在我需要添加另一个 JS 前端,该前端将共享一些组件、库等。我不想重复代码,所以我发现我可以使用许多工具来实现此目的,例如lerna
、nx
等turborepo
,用于使用共享包管理 monorepo。
问题是我发现的所有教程和示例存储库都基于 100% JS 存储库,例如前面的 React + 后面的 Nest 等。
所以问题-用于前。nx
在具有多种语言的存储库上有意义,只是为了在 JS 包上利用它?如果是,目录结构应该是什么样子?或者也许有更好的 monorepo 工具是为多种语言设计的,而不仅仅是 JS?
我有基本枚举
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) 我有两个对象:
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,所以我可以使用那里的函数,但我找不到任何用于此目的的函数。有没有?
我正在看别人的代码,我不明白。这是类的示例:
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”的信息,以及它应该做什么。我认为这是错字,它应该在类内部,但多个类是这样创建的。这是有效的代码还是有人不知道他在做什么?
我同时学习 Jest 和 Cypress。我知道他们不是直接竞争对手,因为 Cypress 专注于 E2E,而 Jest 专注于单元测试。现在,我已经在我的项目中实现了 Jest 和 Cypress,并进行了很少的测试。
但实际上大多数事情我都可以在 Cypress 和 Jest 中测试,而且我经常很难决定用什么来编写我的测试。与单个测试库相比,它也更难维护。
我想知道 - Cypress(或替代品)和 Jest(或替代品)一起使用的频率如何?使用两者真的是标准和良好的做法吗?或者大多数开发人员/团队坚持单一的解决方案,这很好?
我知道这shallowRef
对于资源来说更轻,因为它只监视数组键的更改或直接值的更改。例如,它不会观察对象字段的深处。凉爽的。
但是字符串或数字呢?使用这些shallowRef
替代品有意义吗?ref
有影响吗?
或者字符串的 ref 默认是浅的?
我的想法是 - 也许最好始终用于shallowRef
所有数据,并ref
仅在真正需要时将其更改为正常(例如带有对象的数组)。这样,我就不会ref
在不需要的时候错误地使用更多消耗资源的资源。
使用 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 方法,因为我将在应用程序的许多地方使用这个唯一计数。 …
我有菜单和汉堡按钮可以切换它,并且想测试这种行为。但是,菜单并没有完全消失,只是在隐藏时变得更薄(只有图标可见),所以我不能只测试它是否可见,因为它总是可见。
因此,我通过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 中,这样它就可以在全球范围内工作。
我有一个对象,其中每个字段都是字符串数组。我还有字符串变量,它只能具有基于对象中数组值的值。
现在我想检查这个字符串属于哪个数组(哪个对象字段)。我只是通过简单地使用来做到这一点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) 我有多个带有时间戳的模型。我经常使用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) cypress ×3
php ×3
vue.js ×3
javascript ×2
laravel ×2
animation ×1
ecmascript-6 ×1
eloquent ×1
enums ×1
firefox ×1
fonts ×1
jestjs ×1
laravel-5.5 ×1
lerna ×1
lodash ×1
lumen ×1
monorepo ×1
mysql ×1
nrwl-nx ×1
nuxt.js ×1
photoshop ×1
php-8 ×1
php-8.1 ×1
scope ×1
typescript ×1
vuejs3 ×1
webfonts ×1