0

我已经编写了一个服务MyService和它的模拟版本——MyServiceMock用于单元测试,提供和使用模拟服务的结果,直到我的 BE 准备好。

我用作MyService的别名MyServiceMock,因此将来当 BE 准备好时,我不必更改我的代码:

在我的服务模块中,我使用:

import { MyServiceMock as MyService } from './my-service/my-service-mock.service';

const providers: Array<Provider> = [
  MyService,

...

在我的组件中也是如此:

import { MyServiceMock as MyService } from './my-service/my-service-mock.service';

...

 constructor(
   myServce: myService,

...

ng serve它和...一起工作得很好,ng build直到我为构建服务。浏览器中出现运行时错误MyService is undefined。但请注意,当通过 Angular 提供服务时,ng serve一切正常。ng build|中没有警告和错误。ng build --prod构建流程。

下面的解决方案很简单,但我将不胜感激。

谢谢!

4

2 回答 2

2

您可以简单地告诉 Angular 在请求真正的服务时提供您的假服务,而不是伪造导入。以StackBlitz为例。

app.module.tsproviders

@NgModule({
  imports:      [ BrowserModule, FormsModule ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ],
  providers: [
    {
      provide: RealService,
      useClass: FakeService
    }
  ]
})
export class AppModule { }

现在,每次请求 RealService 时,都会提供虚假服务。

于 2019-10-16T09:50:40.160 回答
0

解决方案:

在服务模块中,我们按原样提供模拟服务,没有别名。我们只在组件中使用别名:

import { MyServiceMock } from './my-service/my-service-mock.service';

const providers: Array<Provider> = [
  MyServiceMock,

...
于 2019-10-16T09:31:30.020 回答