Unit testing 错误:需要一个符合条件的请求;按函数匹配:“;,一无所获

Unit testing 错误:需要一个符合条件的请求;按函数匹配:“;,一无所获,unit-testing,angular6,karma-jasmine,angular7,Unit Testing,Angular6,Karma Jasmine,Angular7,我有一个userService.spec.ts文件要测试。代码是这样的。它调用一个get函数,该函数调用ADMIN\u API\u URL。我尝试测试给定的文件,但遇到了标题中提到的错误。 我的user.service.spec.ts文件 describe('Service: User service', () => { let httpMock: HttpTestingController; let userService: UserService; let url: strin

我有一个
userService.spec.ts
文件要测试。代码是这样的。它调用一个get函数,该函数调用
ADMIN\u API\u URL
。我尝试测试给定的文件,但遇到了标题中提到的错误。 我的user.service.spec.ts文件

 describe('Service: User service', () => {
 let httpMock: HttpTestingController;
 let userService: UserService;
 let url: string;

  beforeEach(() => {
   TestBed.configureTestingModule({
    imports: [HttpClientTestingModule],
     providers: [
    { provide: AUTH_API_URL, useValue: 'https://auth.example.com/api/' 
      },
    { provide: SSO_API_URL, useValue: 'https://sso.example.com/auth/api/' },
    { provide: WIT_API_PROXY, useValue: 'https://wit.example.com/api/'},
    { provide: ADMIN_API_URL, useValue: 'https://admin.example.com/api/'},
    { provide: REALM, useValue: 'realm' },
    Broadcaster,
    Logger,
    AuthenticationService,
    HttpHandler,
    UserService
  ]
});
httpMock = TestBed.get(HttpTestingController);
url = TestBed.get(ADMIN_API_URL);
userService = TestBed.get(UserService);
 });

 it('Get user by user name returns valid user', (done) => {
const testUser = [{
  'attributes': {
    'fullName': 'name',
    'imageURL': '',
    'username': 'myUser'
  },
  'id': 'userId',
  'type': 'userType'
}];
userService.getUsersByName('name').subscribe((user) => {
  expect(user[1].id).toEqual('userId');
  done();
});
const req = httpMock.expectOne(request => request.method === 'GET'
&& request.url === `${url}search/users?q=name`);
req.flush({data: testUser});
 });
});

我试着测试我脑海中的所有东西,但仍然找不到我的代码出了什么问题。我是否犯了愚蠢的错误?

很可能URL不匹配。
expectOne
条件
(request.url==`${url}搜索/users?q=name`)
可能失败。您可以记录模拟请求URL以查看实际URL是什么

const req=httpMock.expectOne(请求=>{
log(“url:,request.url”);
返回true;
});

在我的例子中,被测试的服务依赖于其他服务,我对此进行了模拟。模拟依赖项缺少被测试服务调用的模拟函数。这个错误被默默地接受了


添加模拟函数后,它将开始正常工作。

编辑:您描述的问题可能是由“静默”问题引起的。我的经验如下

首先,检查您的服务依赖项,如
AuthenticationService
或诸如此类

您创建的请求可能会在管道中进一步与这些依赖项交互,并且可能在到达Angular的HTTP客户端之前被拒绝


这样,请求将不会被
HttpTestingController
注册,并且您将在测试中得到“无”的结果。

这不是问题的答案,您应该删除它并将其移动到注释中。此外,代码是错误的-计算括号,并且在“void不可分配给boolean”中出现错误。更正了缺少的括号。答案是正确的。当expectOne期望的URL与服务使用的URL不同时,会发生错误。代码示例只是提供一个想法,提问者可以通过记录来确认传入的URL,然后在条件中修复预期的URL(request.URL==
${URL}search/users?q=name
)。这在Angular 10上不起作用
没有重载匹配此调用