Javascript 具有自定义标头的单元测试拦截器

Javascript 具有自定义标头的单元测试拦截器,javascript,angular,unit-testing,jasmine,angular-http-interceptors,Javascript,Angular,Unit Testing,Jasmine,Angular Http Interceptors,我一直在尝试在Angular 6的拦截器中运行一个测试单元,但是经过多次尝试和错误后,我不断得到以下错误: 错误:应为条件“按函数匹配:”提供一个匹配请求,但未找到任何匹配请求 我对NG6和它的单元测试有点陌生,在文档中找不到任何东西 这就是我得到的: 令牌服务(由于它与后端没有连接,因此被模拟) 有人能帮我理解我遗漏了什么吗?我想你遗漏了这样一个事实:TokenService不是简单的值,而是使用findtokenada方法返回可观察的类 下面是发生的情况: 您定义了mock: const m

我一直在尝试在Angular 6的拦截器中运行一个测试单元,但是经过多次尝试和错误后,我不断得到以下错误:

错误:应为条件“按函数匹配:”提供一个匹配请求,但未找到任何匹配请求

我对NG6和它的单元测试有点陌生,在文档中找不到任何东西

这就是我得到的:

令牌服务(由于它与后端没有连接,因此被模拟)


有人能帮我理解我遗漏了什么吗?

我想你遗漏了这样一个事实:
TokenService
不是简单的值,而是使用
findtokenada
方法返回可观察的类

下面是发生的情况:

您定义了mock:

const mockTokenService = {
  headerName: 'x-fake',
  token: 'fake'
};
推翻它:

{
  provide: TokenService,
  useValue: mockTokenService
},
现在Angular将使用这个
mockTokenService
对象作为
RestInterceptor
中注入的值,然后

this.tokenService.findTokenData().subscribe(res => {
                      ||
                  undefined  => error
下面是您可以采取的措施:

import { of } from 'rxjs';
...
const mockToken = {
  headerName: 'x-fake',
  token: 'fake'
};
const mockTokenService = {
  findTokenData: () => {
    return of(mockToken);
  }
};
...
const req = httpMock.expectOne(r =>
  r.headers.has(`${mockToken.headerName}`) &&
  r.headers.get(`${mockToken.headerName}`) === `${mockToken.token}`);

我认为您忽略了一个事实,即
TokenService
不是简单的值,而是使用
findtokenada
方法进行分类,该方法返回可观察值

下面是发生的情况:

您定义了mock:

const mockTokenService = {
  headerName: 'x-fake',
  token: 'fake'
};
推翻它:

{
  provide: TokenService,
  useValue: mockTokenService
},
现在Angular将使用这个
mockTokenService
对象作为
RestInterceptor
中注入的值,然后

this.tokenService.findTokenData().subscribe(res => {
                      ||
                  undefined  => error
下面是您可以采取的措施:

import { of } from 'rxjs';
...
const mockToken = {
  headerName: 'x-fake',
  token: 'fake'
};
const mockTokenService = {
  findTokenData: () => {
    return of(mockToken);
  }
};
...
const req = httpMock.expectOne(r =>
  r.headers.has(`${mockToken.headerName}`) &&
  r.headers.get(`${mockToken.headerName}`) === `${mockToken.token}`);

这正是我所缺少的,也感谢你对这个问题的解释。很好的解释@yurzui。有这样一个解释的答案真的很有帮助。这正是我所缺少的,也谢谢你在这里给出关于这个问题的解释。很好的解释@yurzui。有这样一个解释的答案真的很有帮助。