在运行角度单位测试用例时出现此错误:
测试结果
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('这里是一个对象'));
其中的是从“ rxjs”导入的。当我记录of('Here go an object')的值时,表明它是可观察的。
如何解决该问题?