javascript - Angular 2 - Http 测试 - 错误 : "Cannot read property ' getCookie' of null"

标签 javascript http testing angular

在以下代码上使用 karma 运行 Jasmine 测试时,总是在控制台中出现此错误:

错误:

TypeError: Cannot read property 'getCookie' of null

服务:

//http.service.ts
import {Injectable, Inject, ReflectiveInjector}    from '@angular/core';
import {Headers, Http, Response, HTTP_PROVIDERS} from '@angular/http';

import {Observable} from "rxjs";

const injector = ReflectiveInjector.resolveAndCreate(HTTP_PROVIDERS);
const http = injector.get(Http);

@Injectable()
export class HttpService {

  constructor() {}

  httpTest(){
    return http.get("https://jsonplaceholder.typicode.com/users")
        .map(response =>{ return response.json()});
  }
}

测试文件:

//http.service.spec.ts
import {
  it,
  describe,
  expect,
  inject,
  addProviders,
  beforeEach
} from '@angular/core/testing';
import {MockBackend, MockConnection} from '@angular/http/testing';
import {provide} from '@angular/core';
import {
  Http,
  BaseRequestOptions,
  Response,
  ResponseOptions
} from '@angular/http';


import { HttpService } from './http.service';

describe('Http-Test', () => {

  beforeEach(() => {
    addProviders([
      HttpService,
      BaseRequestOptions,
      MockBackend,
      {
        provide: Http,
        useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => {
          return new Http(backend, defaultOptions);
        },
        deps: [MockBackend, BaseRequestOptions]
      }
    ])
  });

  beforeEach(inject([MockBackend], (backend: MockBackend) => {
    const baseResponse = new Response(new ResponseOptions({ body: 'userListAsJSON' }));
    backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
  }));

  it('should return response when subscribed to httpTest',
    inject([HttpService], (testService: HttpService) => {
      testService.httpTest().subscribe((res: Response) => {
        expect(res.text()).toBe('userListAsJSON');
      });
    })
  );

})

没有找到任何它不能“读取 null 的属性 'getCookie'” 的原因,或者为什么它试图读取它的原因...

最佳答案

这是 XSRFStrategy 提供程序的问题。

如果您在测试文件中创建一个伪造的 XSRFStrategy 并添加为提供者,则可以使用。

class FakeXSRFStrategy implements XSRFStrategy {
  public configureRequest(req: Request) { /* */ }
}

const XRSF_MOCK = provide(XSRFStrategy, { useValue: new FakeXSRFStrategy() })

关于javascript - Angular 2 - Http 测试 - 错误 : "Cannot read property ' getCookie' of null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39245831/

相关文章:

javascript - 当您使用 javascript 在输入字段中输入信息时填充文本区域

javascript - setAttribute() 无法按我预期的方式工作

asp.net - http header 中非ascii值的当前状态?

javascript - 如何从 HTTP.call "GET"返回 Meteor.JS 中的值

testing - Spring Data Neo4j 4.0.0.M1 测试配置

performance - 负载测试中崩溃点和降级之间的区别

testing - 什么是好的软件应用程序回归测试框架?

javascript - 如何编写一个Javascript函数来按顺序从字符串中获取所有回文子序列?

javascript - ReactJS:未捕获( promise 中) this.setState 不是一个函数

ios - Content-Length 最大允许长度