预期响应状态:null 用于 URL 的 null:null 等于“Project11" [英] Expected Response with status: null null for URL: null to equal 'Project11'
问题描述
我正在使用 angular7 并在 jasmine 和 karma 中进行单元测试.我面临错误 -
<块引用>错误:预期响应状态为:null 网址为 null:null 等于Project11".
我的包版本是 -
<块引用>"@types/jasmine": "~2.8.6","@types/jasminewd2": "~2.0.3","@types/jquery": "^3.3.22","@types/node": "~8.9.4","codelyzer": "~4.2.1",茉莉花核":~2.99.1",茉莉花规格报告者":〜4.2.1","业力": "~1.7.1","karma-chrome-launcher": "~2.2.0",karma-coverage-istanbul-reporter":~1.4.2",业力茉莉花":〜1.1.1",karma-jasmine-html-reporter":^0.2.2","量角器": "^5.4.1","ts-node": "~5.0.1","tslint": "~5.9.1",打字稿":~3.1.3"
import { inject } from '@angular/core/testing';从'@angular/http/testing'导入{ MockBackend,MockConnection };进口 {Http、HttpModule、XHRBackend、ResponseOptions、响应,BaseRequestOptions} 来自'@angular/http';从'@angular/core'导入{ NgModule,CUSTOM_ELEMENTS_SCHEMA,NO_ERRORS_SCHEMA};;fdescribe('ProjectManagementComponent', () => {让comp:项目管理组件;让夹具:ComponentFixture;让 de: DebugElement;让 el: HTMLElement;beforeEach(异步(() => {TestBed.configureTestingModule({声明:[ProjectManagementComponent],架构:[CUSTOM_ELEMENTS_SCHEMA,NO_ERRORS_SCHEMA],进口:[HttpClientModule,RouterTestingModule,RouterModule,NgbModule,NgxPaginationModule,FormsModule,ReactiveFormsModule,BrowserModule,],提供者:[{提供:ProjectManagementServiceStub,useClass:ProjectManagementServiceStub},{提供:产品服务,使用类:产品服务},{提供:HttpClient,Http,useFactory:(后端,选项)=>{返回新的 Http(后端,选项);},部门:[MockBackend,BaseRequestOptions]},模拟后端,BaseRequestOptions,项目管理服务]}) .compileComponents()}));beforeEach(异步(() => {夹具 = TestBed.createComponent(ProjectManagementComponent);comp = fixture.componentInstance;fixture.nativeElement.querySelectorAll('button');}));it('应该创建组件', () => {夹具 = TestBed.createComponent(ProjectManagementComponent);comp = fixture.componentInstance;期望(comp).toBeTruthy();});it('应该得到 toEqual 的值', async(inject([ProjectManagementServiceStub, MockBackend],(服务:ProjectManagementServiceStub,后端:MockBackend)=>{backend.connections.subscribe((conn: MockConnection) => {常量选项: ResponseOptions = new ResponseOptions({ body: 'Project11' });conn.mockRespond(新响应(选项));});service.getProject("http://192.168.5.140:3002/api/project/").subscribe(res => {console.log("订阅调用")期望(res).toEqual('Project11')})})))});
app.component.service.stub.ts
import { Injectable } from '@angular/core';从@angular/common/http"导入 { HttpClient };从'rxjs/operators'导入{地图};从配置"导入{配置};从rxjs"导入{ Observable };常量 baseUrl: 字符串 = config.url;@Injectable()导出类 ProjectManagementServiceStub {构造函数(私有http:HttpClient){}getProject(url) :Observable<any>{返回 this.http.get(url).pipe(地图(响应=>响应))}}
@Stevy 和 Shashank,感谢您的建议.我创建了一个单独的 service.spec.ts 文件并像这样测试了服务 -
fdescribe('ProjectManagementServiceStub', () => {让服务:ProjectManagementServiceStub;让 httpMock: HttpTestingController;beforeEach(()=>{TestBed.configureTestingModule({ 提供者: [ProjectManagementServiceStub] ,进口:[HttpClientModule,HttpClientTestingModule,RouterTestingModule,RouterModule,NgbModule,NgxPaginationModule,FormsModule,ReactiveFormsModule,BrowserModule,],})服务 = TestBed.get(ProjectManagementServiceStub);httpMock = TestBed.get(HttpTestingController);})it("应该初始化", inject([ProjectManagementServiceStub], (service1:ProjectManagementServiceStub)=>{期望(服务1).toBeTruthy();}));it("应该异步获取数据",假异步(注入([ProjectManagementServiceStub, HttpTestingController],(service1: ProjectManagementServiceStub, 后端: HttpTestingController)=>{const url = "http://192.168.x.xxx:3002/api/project/";常量响应对象:任何[]= [{项目ID:ID123",名称:项目1"}]让响应=空;service1.getProject().subscribe((receivedResponse : any) =>{响应 = 收到响应;console.log("响应 = ", 响应)期望(响应).toEqual(响应对象);期望(receivedResponse.length).toBe(1);},(错误:任何)=>{});常量 requestWrapper = backend.expectOne({url :"http://192.168.x.xxx:3002/api/project/" });期望(requestWrapper.request.method).toEqual('GET');期望(requestWrapper.cancelled).toBeFalsy();requestWrapper.flush(responseObject)})))afterEach(() => {httpMock.verify();});});
courtsey - https://blog.knoldus.com/unit-testing-of-angular-service-with-httpclient/
https://alligator.io/angular/testing-httpclient/p>
I am using angular7 and doing unit testing in jasmine and karma. And I am facing error -
Error: Expected Response with status: null null for URL: null to equal 'Project11'.
My packages versions are -
"@types/jasmine": "~2.8.6", "@types/jasminewd2": "~2.0.3", "@types/jquery": "^3.3.22", "@types/node": "~8.9.4", "codelyzer": "~4.2.1", "jasmine-core": "~2.99.1", "jasmine-spec-reporter": "~4.2.1", "karma": "~1.7.1", "karma-chrome-launcher": "~2.2.0", "karma-coverage-istanbul-reporter": "~1.4.2", "karma-jasmine": "~1.1.1", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "^5.4.1", "ts-node": "~5.0.1", "tslint": "~5.9.1", "typescript": "~3.1.3"
Testing - Can't resolve all parameters for (ClassName)
import { inject } from '@angular/core/testing';
import { MockBackend, MockConnection } from '@angular/http/testing';
import {
Http, HttpModule, XHRBackend, ResponseOptions,
Response, BaseRequestOptions
} from '@angular/http';
import { NgModule, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA} from '@angular/core';;
fdescribe('ProjectManagementComponent', () => {
let comp: ProjectManagementComponent;
let fixture: ComponentFixture<ProjectManagementComponent>;
let de: DebugElement;
let el: HTMLElement;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ProjectManagementComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],
imports: [HttpClientModule, RouterTestingModule, RouterModule, NgbModule, NgxPaginationModule, FormsModule, ReactiveFormsModule, BrowserModule,],
providers: [{ provide: ProjectManagementServiceStub, useClass: ProjectManagementServiceStub },
{ provide: ProductsService, useClass: ProductsService }, {
provide: HttpClient,Http, useFactory: (backend, options) => {
return new Http(backend, options);
},
deps: [MockBackend, BaseRequestOptions]
},
MockBackend,
BaseRequestOptions,ProjectManagementService
]
}) .compileComponents()
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(ProjectManagementComponent);
comp = fixture.componentInstance;
fixture.nativeElement.querySelectorAll('button');
}));
it('should create component', () => {
fixture = TestBed.createComponent(ProjectManagementComponent);
comp = fixture.componentInstance;
expect(comp).toBeTruthy();
});
it('should get value of toEqual', async(inject([ProjectManagementServiceStub, MockBackend],
(service: ProjectManagementServiceStub, backend: MockBackend) => {
backend.connections.subscribe((conn: MockConnection) => {
const options: ResponseOptions = new ResponseOptions({ body: 'Project11' });
conn.mockRespond(new Response(options));
});
service.getProject("http://192.168.5.140:3002/api/project/").subscribe(res => {
console.log("Subscription called")
expect(res).toEqual('Project11')
})
})))
});
app.component.service.stub.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';
import { config } from "config";
import { Observable } from "rxjs";
const baseUrl: string = config.url;
@Injectable()
export class ProjectManagementServiceStub {
constructor(private http: HttpClient) { }
getProject(url) :Observable<any>{
return this.http.get(url )
.pipe(map(Response => Response))
}
}
@Stevy and Shashank, Thanks for your advice. I created a separate service.spec.ts file and tested the service like this -
fdescribe('ProjectManagementServiceStub', () => {
let service: ProjectManagementServiceStub;
let httpMock: HttpTestingController;
beforeEach(()=>{
TestBed.configureTestingModule({ providers : [
ProjectManagementServiceStub] ,
imports: [HttpClientModule, HttpClientTestingModule,RouterTestingModule, RouterModule, NgbModule, NgxPaginationModule, FormsModule, ReactiveFormsModule, BrowserModule,]
,})
service = TestBed.get(ProjectManagementServiceStub);
httpMock = TestBed.get(HttpTestingController);
})
it("should be initialized ", inject([ProjectManagementServiceStub], (service1:ProjectManagementServiceStub)=>{
expect(service1).toBeTruthy();
}));
it("should fetch data asynchronously",
fakeAsync(
inject(
[ProjectManagementServiceStub, HttpTestingController],
(service1: ProjectManagementServiceStub, backend : HttpTestingController)=>{
const url = "http://192.168.x.xxx:3002/api/project/";
const responseObject :any[]= [{
projectId: "ID123",
name: 'Project1'
}]
let response = null;
service1.getProject().subscribe(
(receivedResponse : any) =>{
response = receivedResponse;
console.log("Response = ", response)
expect (response).toEqual(responseObject);
expect(receivedResponse.length).toBe(1);
},
(error: any) =>{}
);
const requestWrapper = backend.expectOne({url :"http://192.168.x.xxx:3002/api/project/" });
expect (requestWrapper.request.method). toEqual('GET');
expect(requestWrapper.cancelled).toBeFalsy();
requestWrapper.flush(responseObject)
}
)
))
afterEach(() => {
httpMock.verify();
});
});
courtsey - https://blog.knoldus.com/unit-testing-of-angular-service-with-httpclient/
https://alligator.io/angular/testing-httpclient/
这篇关于预期响应状态:null 用于 URL 的 null:null 等于“Project11"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!