小编tom*_*ler的帖子

在 Cypress 中剔除 Angular 服务

我有这个 angular webapp,我想在模拟的 REST API 上运行 e2e 测试。我可以很容易地将我的网络请求存根到我的 REST API,但身份验证是使用第三方提供程序(使用放大的认知)。

现在我想删除包装身份验证的 Angular 服务。

在 Angular 我有

@Injectable({
  providedIn: 'root'
})
export class AuthenticationService {
  some methods

  isSignedIn(): Observable<boolean> {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我想存根isSignedIn()- 方法。我的第一次尝试看起来像这样:

import {AuthenticationService} from "../../src/app/authentication.service";
import {BehaviorSubject} from "rxjs";

context('albums', () => {

  it('get albums', () => {
    cy.stub(AuthenticationService,'isSignedIn').returns(new BehaviorSubject(true));
  }
}
Run Code Online (Sandbox Code Playgroud)

Cypress/Chrome 然后抱怨它无法在该位置找到 AuthenticationService。我该如何解决这个问题。

typescript amazon-cognito angular cypress

12
推荐指数
1
解决办法
679
查看次数

Angular Universal 需要initialNavigation=enabled,这会破坏 APP_INITIALIZER 和 Guards

在将 Angular Universal 添加到我们的应用程序时,我们必须initialNavigation="enabled"在路由器上设置标志,以避免闪烁。

现在这给我们带来了两个问题:

  1. 我们动态创建路线,打开其中一条路线现在失败
  2. 因为应用程序不会等待APP_INITIALIZERs 加载,所以无法加载受保护的路由,因为守卫总是假设用户未经授权,因为检查发生在APP_INITIALIZER

我发现了几个与此相关的 Github 问题(即https://github.com/angular/universal/issues/1623),但没有一个真正提供了解决方案。

如何使用initialNavigation="enabled"while 同时等待APP_INITIALIZERs 执行?

编辑(01/02/2021):在 Angular 11 中,措辞已更改,该选项现在称为enabledBlocking。然而这里提到的问题并没有涉及到这一点。

angular-universal angular

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

在多模块Angular设置和子库中使用ngx-translate

我在Angular应用程序中使用ngx-translate进行翻译.它通过简单的项目设置工作得很好,但我们开发了一个大型业务应用程序,不同的组件被分成几个单独的库.

有些图书馆需要有一些翻译,当然,只需点击同一个按钮,即可对应用的所有部分进行翻译.

使用angular-librarian捆绑组件库到目前为止,我还没有成功为ngx-translate顶级Angular-Cli项目和包含的角度库管理库创建一个实例.

我一直在使用基本上各种输入组合的试了几个项目的设置ngx-translateforRoot()和/或forChild()没有成功.我总是有一个缺少的提供者,文本出现但语言没有一起改变或根本没有.pp.

有谁拉过这个并且可以显示一个有效的项目设置示例/ plunkr?

angular-cli ngx-translate angular

6
推荐指数
0
解决办法
694
查看次数

Angular 5 polyfill async /等待IE11

我们开发了一个需要IE11支持的软件.由于多个源声明,IE11不支持async/await:

以及一些博客文章.

我们现在写了一个简单的Angular 5项目,该项目使用async/await,它在IE11中工作正常.我们可以安全地假设Angular在IE11中使用某种polyfill来增加对它的支持吗?我找不到任何来源说Angular增加对它的支持.

async-await ecmascript-2016 angular

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

Cypress 测试失败,因为 Chrome Renderer 在 CI 中崩溃(使用无人机)

我们将无人机用于 CI 并在无人机内运行 Cypress 来测试我们的应用程序(Angular 7)。

所有测试在我的本地机器上运行良好,但在 CI 中,由于 Chrome 渲染器崩溃,测试失败。大约 50% 的失败,即使它们真的不长也不复杂(大多数只有大约 5-10 行)。

我知道这是一个已知问题 ( https://github.com/cypress-io/cypress/issues/350 ) 并花了相当多的时间尝试在线提出的各种修复程序。我已经尝试过:

  • 增加 dev/shm 的大小
  • 升级到最新版本的无人机、无人机代理和柏树
  • 减少 numTestsKeptInMemory 设置

该修复程序主要推广,设置--ipc=host目前不适用于无人机(https://discourse.drone.io/t/does-drone-support-ipc-host-option/1049)。

我实际上有点困惑,因为原始票证明确指出When running headlessly on very long and memory intense applications we are seeing renderer crashes with Docker.我很确定我们的应用程序既不符合条件very long也不符合条件memory intense(Chrome 任务管理器说页面消耗大约 50-80mb),所以也许我们的问题实际上是其他问题?

如果我在这里遗漏了一些东西,任何人都可以提供更多提示吗?

google-chrome drone angular cypress

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

HttpRequest和reportProgress无法正常工作或弄乱了我的请求

我正在使用Angular 5实现文件上传服务,我想向用户提供有关上传进度的反馈。我发现有几页建议使用reportProgressAngulars随附的参数HttpClient,但无法使其正常工作。

我对所有的HTTP请求都使用包装器类,然后该类进行一些逻辑处理,最后所有请求最终都以被调用的相同方法结束:

public request(request: HttpRequest<any>, options?: any): Observable<any> {
  return this.httpClient.request(request.method, request.url, {
    body: request.body,
    headers: request.headers,
    responseType: request.responseType,
    ...options
  });
}
Run Code Online (Sandbox Code Playgroud)

然后,我使用{ reportProgress: true }as 传递一个上传(发布)调用options。这根本不起作用,对请求的任何更改都没有。因此,我怀疑我实际上需要reportProgress在HttpRequest构造函数中使用-parameter使其起作用,并相应地更改了我的代码:

public request(request: HttpRequest<any>, options?: any): Observable<any> {
  return this.httpClient.request(
    new HttpRequest(request.method, request.url, request.body, {
      headers: request.headers,
      responseType: request.responseType,
      ...options
    })
  );
}
Run Code Online (Sandbox Code Playgroud)

这导致了更奇怪的行为,现在无论我的选择是什么样,我始终只收到{type: 0}请求的响应。

我要监督什么?我使用Angular 5.1.1,现在我真的有点困惑。

因此,举一个明确的例子,现在我对这两个HttpRequest收到相同的响应:

{  
  "url":"http://127.0.0.1:8888/test",
  "body":{  
   "data":"testdata"
  },
  "reportProgress":false,
  "withCredentials":false,
  "responseType":"json",
  "method":"POST",
  "headers":{ some-headers ... } …
Run Code Online (Sandbox Code Playgroud)

file-upload httprequest angular angular-httpclient

4
推荐指数
3
解决办法
7364
查看次数

如何使用javascript从srcset中选择正确的src

我的页面上有一个srcset

<img src="bg__x-large.png" srcset="bg__small.png 900w, bg__med.png 1200w, bg__large.png 1920w">
Run Code Online (Sandbox Code Playgroud)

这是由视差脚本使用,现在只读取src属性

$(this).css('background-image', 'url(' + $(this).attr('src') + ')' );
Run Code Online (Sandbox Code Playgroud)

将其设置为背景图像.

如何使用jquery从srcset中读取正确的src?

javascript jquery responsive-design

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

如何使用 Typescript 检查数组中泛型的实例

我有一个接收数组的函数,但它们可以是不同的类型。根据我需要不同格式的类型:

public format(value: Foo[] | Bar[]) {
  // this does not work
  if (value instanceof Foo[]) ...
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以用来instanceof检查 Typescript 中是否有某个类的对象。

new Foo() instanceof Foo // true
Run Code Online (Sandbox Code Playgroud)

这也适用于检查我是否有数组。

new Array<Foo> instanceof Array // true
Run Code Online (Sandbox Code Playgroud)

但我无法检查我的数组是否实际上被输入到 Foo

new Array<Foo>() instanceof Array<Foo> 
// The right-hand side of an 'instanceof' expression must be of type 'any' 
// or of a type assignable to the 'Function' interface type.
Run Code Online (Sandbox Code Playgroud)

有没有办法显式检查数组值的类型?

arrays instanceof typescript

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

如何使用角度异步管道检查 *ngIf 内部的长度?

如何*ngIf使用异步管道检查内部长度?

我尝试这样做,但它不起作用。正确的做法是什么?

<mat-menu #favoriteMenu="matMenu">
  <ng-container *ngIf="items$ | async as items && items.length; else empty">
    <button mat-menu-item *ngFor="let item of items">
      ...
    </button>
  </ng-container>
  <ng-template #empty>no favorite here</ng-template>
</mat-menu>
Run Code Online (Sandbox Code Playgroud)

angular-ng-if angular

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