gpt4 book ai didi

在单元测试中从 ngrx 存储中选择时,Angular .pipe 和 .subscribe 未定义

转载 作者:行者123 更新时间:2023-12-02 02:53:24 33 4
gpt4 key购买 nike

我有一些以前工作的单元测试,但在某个时候它们停止工作了。

每当我像这样从 ngrx 存储中选择一个 observable 时:

const observable = this.store.select(isAuthenticated);

然后尝试调用.pipe 或.subscribe,这些函数是未定义的。

observable.subscribe(authenticated => {});

TypeError: observable.subscribe is not a function

TypeError: _this.store.select(...).pipe is not a function

我正在导入 StoreModule 并添加适当的模型。这些组件在未测试时工作正常。

编辑:我使用此 MockStore 函数将数据添加到商店以供选择。我怀疑问题出在 map 函数中,因为 rxjs 6 改变了这一点。商店选择返回一个 map 函数而不是一个可观察的函数。

import { TestBed } from '@angular/core/testing';
import { Store } from '@ngrx/store';
import { BehaviorSubject } from 'rxjs';
import { map } from 'rxjs/operators';


export function MockStore(mockStore: any) {

const mockData: BehaviorSubject<Object> = new BehaviorSubject<Object>(mockStore);

const store = TestBed.get(Store);
const storeSpy = spyOn(store, 'select').and.callFake((fn) => {
return map.call(mockData, fn);
});

return storeSpy;
}

export function MockDispatch() {
const store = TestBed.get(Store);
const dispatchSpy = spyOn(store, 'dispatch').and.callFake(() => { return; });
return dispatchSpy;
}

最佳答案

原来我是从错误的区域导入 map

更改:

import { map } from 'rxjs/operators';

到:

import { map } from 'rxjs/operator/map';

一切都重新开始了。

关于在单元测试中从 ngrx 存储中选择时,Angular .pipe 和 .subscribe 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50862379/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com