overrideProvider (токен) не работает в nestJS для Test.createTestingModule - PullRequest
1 голос
/ 05 марта 2019

У меня проблема с переопределением поставщика в тестовом контексте.Я знаю, что упускаю что-то ослепительно очевидное, но я пробовал множество перестановок, и ни одна из них не сработала, поэтому я обращаю это внимание на улей.

У меня есть следующая структура:

shared.module.ts

@Module({
    providers: [
        DatabaseProvider,
        ConfigService,
        CacheService
    ],
    exports: [
        DatabaseProvider,
        ConfigService
        CacheService
    ],
    imports: [HttpModule],
})

, где DatabaseProvider определен как:

const DatabaseProvider = {
    provide: "MongoConnection",
    inject: [ConfigService],
    useFactory: async (config: ConfigService): Promise < typeof mongoose | Object > => {
        return await mongoose.connect(config.getString("MONGO_URI"), { useNewUrlParser: true });
    }
};

my.module.ts

@Module({
    imports: [SharedModule, HttpModule],
    exports: [MyService],
    controllers: [MyController],
    providers: [MyService],
})

app.module.ts

@Module({
    imports: [
        SharedModule,
        MyModule
    ],
    providers: [
        ...
    ],
    controllers: [
        ...
    ]
})

my.service.ts

export class MyService {
    constructor(
        @Inject("MongoConnection") private readonly dbConnection: Connection,
        private _cache: CacheService
    ) { }
...
}

my.spec.ts

let cacheService = {...};
this.db = {...};

const module = await Test.createTestingModule({
        imports: [SharedModule, MyModule, HttpModule]
    })
    .overrideProvider(CacheService)
    .useValue(cacheService)
    .overrideProvider("MongoConnection")
    .useValue(this.db)
    .compile();

Моя проблема заключается в том, что CacheService переопределяется (он использует redis-mock, определенный в cacheService, вместо стандартной реализации redis в CacheService), ноMongoConnection - нет - он все еще вызывает оригинальный DatabaseProvider из shared.module.ts.

Может кто-нибудь указать, что мне не хватает?

...