Angular 使用 Apollo : Unit testing: Error: Client has not been defined yet

标签 angular unit-testing graphql apollo

我正在使用 apollo 客户端进行 graphql。我在 GraphQLModule 中设置了客户端,并将其导入到 AppModule 中。我正在服务中进行查询,该服务也直接导入到 AppModule 中。 但我收到此错误:错误:客户端尚未定义 已经尝试过:Angular - Apollo: Client has not been defined yet .

grapgql.module.ts

import { NgModule } from '@angular/core';
import { ApolloModule, APOLLO_OPTIONS } from 'apollo-angular';
import { HttpLinkModule, HttpLink } from 'apollo-angular-link-http';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { environment } from 'src/environments/environment';
import { GraphqlService } from './graphql.service';

const uri = 'https://api.example.com/graphql';
export function createApollo(httpLink: HttpLink) {
    return {
        link: httpLink.create({ uri }),
        cache: new InMemoryCache(),
    };
}

@NgModule({
    exports: [
        ApolloModule,
        HttpLinkModule
    ],
    providers: [
        {
            provide: APOLLO_OPTIONS,
            useFactory: createApollo,
            deps: [HttpLink],
        },
        GraphqlService,
    ],
})
export class GraphQLModule { }

graphsl.service.spec.ts - 此测试通过。

import { TestBed } from '@angular/core/testing';

import { GraphqlService } from './graphql.service';
import { Apollo } from 'apollo-angular';

describe('GraphqlService', () => {
    let service: GraphqlService;

    beforeEach(() => {
        TestBed.configureTestingModule({
            providers: [
                GraphqlService,
                Apollo
            ]
        });
        service = TestBed.inject(GraphqlService);
    });

    it('should be created', () => {
        expect(service).toBeTruthy();
    });
});

app.module.ts - 此测试失败并抛出错误:客户端尚未定义

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { GraphQLModule } from './graphql/graphql.module';
import { HttpClientModule } from '@angular/common/http';
import { CmTableModule } from './shared/cm-table/cm-table.module';
import { CmComponentsModule } from './shared/cm-components/cm-components.module';
import { CmDirectivesModule } from './shared/cm-directives/cm-directives.module';
import { CmPipesModule } from './shared/cm-pipes/cm-pipes.module';
import { CmDragDropModule } from './shared/cm-drag-drop/cm-drag-drop.module';
import { HttpLinkModule, HttpLink } from 'apollo-angular-link-http';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { ApolloModule, APOLLO_OPTIONS } from 'apollo-angular';
import { GraphqlService } from './graphql/graphql.service';


const uri = 'https://api.example.com/graphql';
export function createApollo(httpLink: HttpLink) {
    return {
        link: httpLink.create({ uri }),
        cache: new InMemoryCache(),
    };
}
@NgModule({
    declarations: [
        AppComponent,
    ],
    exports: [
        ApolloModule,
        HttpLinkModule
    ],
    imports: [
        BrowserModule,
        AppRoutingModule,
        NoopAnimationsModule,
        GraphQLModule,
        HttpClientModule,
        CmTableModule,
        CmComponentsModule,
        CmPipesModule,
        CmDirectivesModule,
        CmDragDropModule,
        ApolloModule,
        HttpLinkModule
    ],
    providers: [{
        provide: APOLLO_OPTIONS,
        useFactory: createApollo,
        deps: [HttpLink],
    },
        GraphqlService],
    bootstrap: [AppComponent]
})
export class AppModule { }

app.component.spec.test

import { TestBed, async } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
import { GraphqlService } from './graphql/graphql.service';
import { Apollo, ApolloModule } from 'apollo-angular';

describe('AppComponent', () => {
    beforeEach(async(() => {
        TestBed.configureTestingModule({
            imports: [
                RouterTestingModule,
                ApolloModule
            ],
            declarations: [
                AppComponent
            ],
            providers: [
                GraphqlService,
                Apollo
            ]
        }).compileComponents();
    }));

    it('should create the app', () => {
        const fixture = TestBed.createComponent(AppComponent);
        const app = fixture.componentInstance;
        expect(app).toBeTruthy();
    });

});

最佳答案

添加导入:[GraphQLModule] 到您的 TestBed.configureTestingModule:

TestBed.configureTestingModule({
        imports: [
            RouterTestingModule,
            **GraphQLModule**,
            ApolloModule
        ],
        declarations: [
            AppComponent
        ],
        providers: [
            GraphqlService,
            Apollo
        ]
    }).compileComponents();

关于Angular 使用 Apollo : Unit testing: Error: Client has not been defined yet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61797767/

相关文章:

unit-testing - 自测试代码与单独测试相比有哪些优点?

python - Nosetests assert_equal 显然不等于 python ==

node.js - 使用 Mongoose、node 和 graphql 防止控制台错误

graphql - 如何使用apollo ios客户端实现graphql订阅

angular - 在上下文之外访问 ngFor 局部变量

angular - 缓存破坏 serviceworker index.html 文件的问题

javascript - Polyfill 支持 Angular 9 自定义元素?

javascript - 使用 Angular 服务 + Jasmine 进行 uni 测试 404 故障响应

graphql - instagram 中的 query_hash 是什么?

html - 在angular2中迭代数组