【发布时间】:2021-05-13 12:09:18
【问题描述】:
我有一个运行良好的简单组件,如下所示:
@Component({
selector: 'component',
template: `
{{userWithAsyncPipe | async | json}} <!-- = null in test -->
{{userFromOnInit | json}} <!-- working test -->
`,
})
export class Component implements OnInit {
constructor(private service: MyService) {
}
userWithAsyncPipe = this.service.getUser();
userFromOnInit;
ngOnInit() {
this.service.getUser().subscribe(user => this.userFromOnInit = user);
}
}
我试图通过模拟service.getUser() 方法来测试它。所以我写了一个大致如下所示的测试组件:
describe('', () => {
...
let myService;
beforeEach(() => {
myService = TestBed.inject(MyService);
});
it('', () => {
spyOn(myService, 'getUser').and.returnValue(of({name: 'Jacob'}));
});
});
但是当我查看 karma 浏览器时,只有变量 userFromOnInit 被解析。 userWithAsyncPipe 等于 null。
这是什么鬼?
【问题讨论】:
-
你能添加完整的测试台设置吗?
-
也请看这里,它有一个如何测试类似代码的示例ng-mocks.sudo.eu/extra/mock-observables
-
我会尝试,但它是 Angular,它涉及很多代码......谢谢你的例子,但它不使用 |异步管道。
-
它不应该使用它。这个想法是你用
MockProvider提供一个假主题,async由CommonModule提供。
标签: angular typescript jasmine