MyService.ts文件 当我们从secp文件serviceURl调用服务时,该服务变得不确定。
.eslintrc.js
Myservice.spec.ts 从此处的规范我们调用服务时,我们无法模拟appconfig.ts返回数据
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
export class Sendnotificationservice {
constructor(private http: HttpClient) {}
public sendnotification(
notificationModel: SendnotificationToModel
): Observable<any> {
return this.http.post<any>(
AppConfig.settings.serviceUrl +
'api/Sendnotificationservice/sendnotification',
notificationModel
//AppConfig.setting.serviceUrl getting cannot read property serviceurl of undefined
);
}
}
AppConfig.ts 无法将返回数据模拟到服务测试用例文件中
import { Injectable, Injector, OnInit } from "@angular/core";
import { HttpClient, HttpResponce } from "@angular/common/http";
import { IAppConfig } from "./app-config.model";
describe('Sendnotificationservice', () => {
let service: Sendnotificationservice;
let httpSpy: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpclientTestingModule],
providers: [Sendnotificationservice],
});
service = TestBed.get(Sendnotificationservice);
service = TestBed.get(HttpTestingController);
});
it('it should get mail', () => {
const test = {
clientno: '',
firstName: 'dev',
lastName: 'som',
phoneNo: '484758373',
};
service.sendnotification(test).subscribe((data) => {
expect(data).toEqual(false);
});
});
});
答案 0 :(得分:0)
这不是您应该在单元测试中模拟的方式。现在,您已经在应用程序代码中包含了测试代码,并且还应该测试该测试代码,如果继续这样,您将陷入测试测试代码的无限循环中,以测试测试代码。
更好的方法是同时模拟AppConfig
服务:
import appConfig from 'assets/config/config.local.json';
class MockAppConfig {
static settings: IAppConfig = appConfig as IAppConfig;
}
TestBed.configureTestingModule({
imports: [HttpclientTestingModule],
providers: [
Sendnotificationservice,
{ provide: AppConfig, useClass: MockAppConfig }
],
});
要执行此操作,您可能必须在"resolveJsonModule": true
内设置tsconfig.spec.json
。考虑到您很可能不再提供此JSON文件,您也可以只导出对象而不是.json
文件。这样可以通过代码提示确保事物的安全。
尽管如此,您还没有到那儿,因为您无法测试这样的Observable
响应。您将收到一条错误消息,提示您“它没有期望”。有多种解决方法,一个简单的方法就是调用done
:
it('it should get mail', (done) => {
const test = {
clientno: '',
firstName: 'dev',
lastName: 'som',
phoneNo: '484758373',
};
service.sendnotification(test).subscribe((data) => {
expect(data).toEqual(false);
done(); // here
});
});
这对我来说还是有点奇怪。您并没有真正测试服务对象,但是您似乎正在测试API响应。该测试应该在调用API的后端进行,或者通过使用Integration / e2e测试来确保API正常工作