gpt4 book ai didi

angular - Angular 单元测试用例中出现错误 : TypeError: this. userService.currentUser.subscribe 不是函数

转载 作者:行者123 更新时间:2023-12-02 19:48:56 25 4
gpt4 key购买 nike

我在运行 Angular 单元测试用例时收到此错误:

测试结果

SidebarComponent
× should create
TypeError: this.userService.currentUser.subscribe is not a function

sidebar.component.spec.ts

describe('SidebarComponent', () => {
let fixture: ComponentFixture<SidebarComponent>;
let mockUserService;

beforeEach(() => {
mockUserService = jasmine.createSpyObj(['currentUser']);

TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
declarations: [SidebarComponent],
schemas: [NO_ERRORS_SCHEMA],
providers: [{ provide: UserService, useValue: mockUserService }]
});

fixture = TestBed.createComponent(SidebarComponent);
});

fit('should create', () => {
mockUserService.currentUser.and.returnValue(of('Here goes an object'));
fixture.detectChanges();
expect(SidebarComponent).toBeTruthy();
});
});

sidebar.component.ts

ngOnInit() {
this.userService.currentUser.subscribe(currentUser => {
// Some code here
});
}

package.json

"devDependencies": {
"@types/jasmine": "2.8.8",
"@types/jasminewd2": "2.0.3",
"@types/node": "9.6.23",
"jasmine-core": "2.99.1",
"jasmine-spec-reporter": "4.2.1",
"karma": "4.2.0",
"karma-chrome-launcher": "2.2.0",
"karma-cli": "2.0.0",
"karma-coverage-istanbul-reporter": "1.4.3",
"karma-jasmine": "2.0.1",
"karma-jasmine-html-reporter": "1.4.0",
"karma-junit-reporter": "1.2.0",
"karma-spec-reporter": "0.0.32",
"protractor": "6.0.0",
"rxjs-tslint": "0.1.7",
}

user.service.ts

@Injectable({ providedIn: 'root'})
export class UserService {
private currentUserSubject = new BehaviorSubject({});
public currentUser: Observable<User> = this.currentUserSubject.asObservable().pipe(distinctUntilChanged());

setUser(user) {
this.currentUserSubject.next({ ...newUser });
}
}

据我所知,要解决这个问题,我们需要在以下语句中使用:

mockUserService.currentUser.and.returnValue(of('Here goes an object'));

其中 of 是从 'rxjs' 导入的。当我记录 of('Here gone an object') 的值时,它表明它是可观察的。

如何解决该问题?

最佳答案

使用 spyOn 来模拟特定的服务方法怎么样:

const userService = TestBed.get(UserService);
const mockedResponse = {}; // Modify as per your need
spyOn(userService, 'currentUser').and.callFake(() => {
return of(mockedResponse);
});

这对我有用。

关于angular - Angular 单元测试用例中出现错误 : TypeError: this. userService.currentUser.subscribe 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58706340/

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