相关疑难解决方法(0)

Angular 7 Component Test使用的是原始服务而不是模拟

我正在尝试测试具有注入服务的组件。我想在测试中提供模拟服务。但是,测试使用的是原始服务而不是模拟服务(我知道这一点是因为我收到“ No Client for HttpClient!”错误,并且在测试中输出的原始服务中还有console.log)。

我可以通过导入HttpClientTestingModule来修复错误,但这不能解决使用原始服务而非模拟服务这一事实。

有什么想法我做错了吗?

这是我的测试代码。Angular版本7

import { TestBed, async, ComponentFixture } from '@angular/core/testing';
import { HelloWorldComponent } from '../../app/components/hello-world/hello-world.component';
import { HelloWorldService } from '../../app/services/hello-world.service';

describe('HelloWorldComponent', () => {

  let component: HelloWorldComponent;
  let fixture: ComponentFixture<HelloWorldComponent>;
  let mockHelloWorldService;
  
  beforeEach(() => {

    mockHelloWorldService = jasmine.createSpyObj(['getHelloWorld']);
    
    TestBed.configureTestingModule({
      imports: [],
      declarations: [HelloWorldComponent],
      providers: [
        [{ provide: HelloWorldService, useClass: mockHelloWorldService }]
      ]
    }).compileComponents();

    fixture = TestBed.createComponent(HelloWorldComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
	
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
  
});
Run Code Online (Sandbox Code Playgroud)

更新

我试过了overrideProvider,现在我遇到了“无法读取未定义的属性'subscribe'(未定义)”错误,感觉像是进度...

这是我的测试代码 …

unit-testing mocking angular

6
推荐指数
2
解决办法
2493
查看次数

Karma +茉莉花+ Angular 4-NullInjectorError:HttpClient没有提供程序

我有以下文件集。我正在尝试使用业力和茉莉花进行单元测试。每当我运行“ ng test”时,我都会在业力页面中出现以下错误。 在此处输入图片说明

Error: StaticInjectorError(DynamicTestModule)[ConfigService -> HttpClient]: 
  StaticInjectorError(Platform: core)[ConfigService -> HttpClient]: 
    NullInjectorError: No provider for HttpClient!
    at _NullInjector.webpackJsonp../node_modules/@angular/core/esm5/core.js._NullInjector.get (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/core/esm5/core.js:1002:1)
    at resolveToken (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/core/esm5/core.js:1300:1)
    at tryResolveToken (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/core/esm5/core.js:1242:1)
    at StaticInjector.webpackJsonp../node_modules/@angular/core/esm5/core.js.StaticInjector.get (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/core/esm5/core.js:1110:1)
    at resolveToken (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/core/esm5/core.js:1300:1)
    at tryResolveToken (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/core/esm5/core.js:1242:1)
    at StaticInjector.webpackJsonp../node_modules/@angular/core/esm5/core.js.StaticInjector.get (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/core/esm5/core.js:1110:1)
    at resolveNgModuleDep (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/core/esm5/core.js:10854:1)
    at _createClass (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/core/esm5/core.js:10891:1)
    at _createProviderInstance$1 (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/core/esm5/core.js:10865:1)
Run Code Online (Sandbox Code Playgroud)

app.module.ts

import { ConfigService } from './config-service.service';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule, APP_INITIALIZER } from '@angular/core';
import { FormGroup, FormsModule, FormControl, Validators, ReactiveFormsModule, FormBuilder } from '@angular/forms';
import { RouterModule, …
Run Code Online (Sandbox Code Playgroud)

testing unit-testing jasmine karma-runner angular

5
推荐指数
1
解决办法
5611
查看次数

标签 统计

angular ×2

unit-testing ×2

jasmine ×1

karma-runner ×1

mocking ×1

testing ×1