Angular7 Jasmine 和 Restangular:无法获得正确的测试模块配置
Angular 7 Jasmine and Restangular: Cannot get proper testing module configuration
给定一个导入 RestAngular 的前端组件,在 CTOR 中声明它并在 ngOnInit 中使用它,如下所示:
import { Restangular } from 'ngx-restangular'
constructor(
private Restangular: Restangular,
private ChangeDetectorRef: ChangeDetectorRef,
) { }
ngOnInit() {
this.Restangular.all("Person")
.all("Kind")
.getList()
.subscribe(pTypes => {
this.personTypes = pTypes;
});
}
上面的代码在提供代码时完美运行。
我正试图让 Jasmine 来创建这个 class,它在 Restangular 上令人窒息。所以我包括了以下提供者如下:
beforeEach(async () => {
TestBed.configureTestingModule({
providers:[Restangular, RestangularHttp, HttpBackend],
这似乎修复了所有 Restangular 依赖项,但现在我看到了:
现在我看到这个错误 TypeError: this.http.handle is not a function
我不明白为什么在Jasmine这边我必须提供这些依赖,前端组件不是处理得很好吗?为什么 jasmine 不像 Angular 那样实例化前端?它似乎是由于没有 "real" 个 Restangular 实例被注入引起的。
解决方法:
如果 front-end 组件尝试使用 Restangular,Jasmine 测试必须导入 Restangular 模块。像这样:
import { RestangularModule } from "ngx-restangular"
beforeEach(async () => {
TestBed.configureTestingModule({
imports: [FontAwesomeModule, FormsModule, ReactiveFormsModule, NgSelectModule, RestangularModule],
这将最低限度地允许在此代码中创建组件
beforeEach(() => {
fixture = TestBed.createComponent(Component);
component = fixture.componentInstance;
创建组件后,它会执行包含 restangular 调用的 ngOnInit 代码,如下所示:
this.Restangular.all("Something")()
.subscribe(pTypes => {
this.personTypes = pTypes;
});
如果上面的 Restangular 调用失败,测试不会捕捉到它,因为组件已经创建!如果调用失败,您必须放入要在绑定数据字段上执行的特定期望语句(对于 Restangular 调用)才能使测试失败。
给定一个导入 RestAngular 的前端组件,在 CTOR 中声明它并在 ngOnInit 中使用它,如下所示:
import { Restangular } from 'ngx-restangular'
constructor(
private Restangular: Restangular,
private ChangeDetectorRef: ChangeDetectorRef,
) { }
ngOnInit() {
this.Restangular.all("Person")
.all("Kind")
.getList()
.subscribe(pTypes => {
this.personTypes = pTypes;
});
}
上面的代码在提供代码时完美运行。
我正试图让 Jasmine 来创建这个 class,它在 Restangular 上令人窒息。所以我包括了以下提供者如下:
beforeEach(async () => {
TestBed.configureTestingModule({
providers:[Restangular, RestangularHttp, HttpBackend],
这似乎修复了所有 Restangular 依赖项,但现在我看到了:
现在我看到这个错误 TypeError: this.http.handle is not a function
我不明白为什么在Jasmine这边我必须提供这些依赖,前端组件不是处理得很好吗?为什么 jasmine 不像 Angular 那样实例化前端?它似乎是由于没有 "real" 个 Restangular 实例被注入引起的。
解决方法: 如果 front-end 组件尝试使用 Restangular,Jasmine 测试必须导入 Restangular 模块。像这样:
import { RestangularModule } from "ngx-restangular"
beforeEach(async () => {
TestBed.configureTestingModule({
imports: [FontAwesomeModule, FormsModule, ReactiveFormsModule, NgSelectModule, RestangularModule],
这将最低限度地允许在此代码中创建组件
beforeEach(() => {
fixture = TestBed.createComponent(Component);
component = fixture.componentInstance;
创建组件后,它会执行包含 restangular 调用的 ngOnInit 代码,如下所示:
this.Restangular.all("Something")()
.subscribe(pTypes => {
this.personTypes = pTypes;
});
如果上面的 Restangular 调用失败,测试不会捕捉到它,因为组件已经创建!如果调用失败,您必须放入要在绑定数据字段上执行的特定期望语句(对于 Restangular 调用)才能使测试失败。