小编Cin*_*ode的帖子

Jasmine 间谍不会覆盖模拟实现

在我正在测试的类的 ngOnInit 方法中,我调用了一个重新运行可观察对象的服务函数。我已经为该服务实现了一个模拟,但我正在尝试使用间谍来完成这个确切的测试用例。根据我的理解,除非我在间谍上调用“.and.callThrough()”,否则间谍将覆盖模拟实现。问题是,尽管我为该函数设置了间谍,但每次模拟实现仍然会被执行。

我尝试将间谍移至 beforeEach 部分,但这没有帮助。我还尝试使用不带“.and.callFake()”扩展名的间谍。但这没有帮助。

规格.ts 文件:

fdescribe('AppComponent', () => {
  let fixture;
  let component;
  let dataServiceMock: DataServiceMock;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [RouterTestingModule],
      declarations: [AppComponent],
      providers: [{ provide: DataService, useClass: DataServiceMock }],
      schemas: [CUSTOM_ELEMENTS_SCHEMA]
    }).compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(AppComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();

    dataServiceMock = TestBed.get(DataService);
  });


  fit('should not show navigation if not logged in', async(() => {
   spyOn(dataServiceMock,'getCurrentUser').and.callFake(() => {
     console.log('IN CALL FAKE')
     throwError(new Error('induced error'))
   });
 }));
Run Code Online (Sandbox Code Playgroud)

服务模拟的实现:

export class DataServiceMock {
  currentUser: …
Run Code Online (Sandbox Code Playgroud)

mocking jasmine karma-jasmine angular angular-test

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

处理包含数组或值的JSON属性

我在Angular应用程序中接收JSON对象:我想获取一些值,但问题是我无法创建TypeScript接口来匹配这些值,因为对于一个键,值可以是包含多个值的数组,也可以只是一个简单的值(见"关系").

一个例子:

{
  "ID": "123",
  "name": "dummy",
  "relations": [
      { "rel": "child", "relValue": ["child1", "child2"] },
      { "rel": "parent", "relValue": "parent"}
  ]
}
Run Code Online (Sandbox Code Playgroud)

无论是否有数组或单个值,如何检索此键的所有元素("关系")的值?

json typescript angular

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

mat-slider change 事件触发太频繁

我正在使用垫子滑块让用户设置一个值。该(input)事件发射器用于显示值“活”(而鼠标仍下跌)。这是有效的。目前,(change)事件发射器用于识别用户何时选择了一个值(释放鼠标)。

第一个问题是,在与滑块的正常交互期间,更改事件会被触发两次:一次是在初次单击滑块时,第二次是在释放滑块时。我希望仅在释放滑块时触发事件,或者具有可以区分两个事件并仅对释放事件起作用的功能。

第二个问题是,当设置了滑块的新值时,我必须发出 HTTP 请求。我不希望这种情况经常发生,所以我想暂停一下。只有当经过一定时间并且没有发生新的更改事件时,我才想要发出 HTTP 请求。

我已经尝试用锁来实现这一点,但它不起作用,因为有时只触发一个更改事件(例如,单击滑块而不是拖动它时),然后错误地翻转了锁定变量和锁定机制由于倒置变量而不再工作。

有没有办法解决这些问题并实现我想要的?

angular-material angular

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