Pact + Angular 错误。MockService的实际交互与预期交互不一致。

问题描述 投票:0回答:1

使用Pact与Angular。

在运行测试时得到以下错误.Error: MockService的实际交互与预期交互不匹配。

    Missing requests:
            GET /dogs

测试中的代码:dog.service.ts


@Injectable({
  providedIn: 'root'
})
export class DogService {

  constructor(private http: HttpClient) {
  }

  getDogs(baseUrl: string): Observable<Dog[]>{
    return this.http.get<Dog[]>(baseUrl + '/dogs');
  }
}

Spec文件。

import {TestBed} from '@angular/core/testing';
import {HttpClientModule} from '@angular/common/http';
import {PactWeb, Matchers} from '@pact-foundation/pact-web';
import { DogService } from './dog.service';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import {Pact} from '@pact-foundation/pact';

describe('Dog service contract tests', () => {
  let provider: PactWeb;


  let dogService: DogService;

  beforeAll(async (done) => {
        provider = new PactWeb({
            port: 1234,
            host: '127.0.0.1',
            log: '.\\log\\pact.log',
            logLevel: 'warn',
            dir: '.\\pacts',
            spec: 2
        });
          // required for slower CI environments
        setTimeout(done, 2000);

          // Required if run with `singleRun: false`
        await provider.removeInteractions();

        console.log('Pact web creation');
    });

  afterEach(async () => {
        await provider.verify();
        console.log('Verify');
    });

  afterAll(async () => {
        return await provider.finalize();
        console.log('Finalize');
    });

  beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [HttpClientTestingModule],
            providers: [
              DogService
            ]
          });
        console.log('Configure test module');
    });

  describe('Contract tests', () => {

      beforeAll(async () => {
        // set up Pact interactions
        await provider.addInteraction({
          state: 'dogs exist',
          uponReceiving: 'get all dogs',
          withRequest: {
              method: 'GET',
              path: '/dogs'
          },
          willRespondWith: {
              status: 200,
              headers: {
                  'Content-Type': 'application/json; charset=utf-8'
              },
              body: Matchers.eachLike({
                  avatar: Matchers.like('xyz'),
                  title: Matchers.like('German Shepard'),
                  subTitle: Matchers.like('This is German Shepard'),
                  imageUrl: Matchers.like('xyz'),
                  description: 'Lorem ipsum'

              }, {min: 2}),
          },
      });
        console.log('Add interaction');
      });

      it('Dog details exist', async () => {
        dogService = TestBed.inject(DogService);
        console.log(provider.mockService.baseUrl);
        dogService.getDogs(provider.mockService.baseUrl).subscribe((response) => {
            expect(response).toBeDefined();
            console.log(response);
          });

    });
    });
});

可能是什么问题?

Package.json:"@pact-foundationkarma-pact"。"^2.3.1", "@pact -foundationpact": "^9.11.0", "@pact-foundationpact-node": "^10.9.4", "@pact-foundationpact-web": "^9.11.0",

javascript angular typescript karma-jasmine pact
1个回答
0
投票

错误信息是说它从来没有收到那个HTTP调用,所以这就是这里的主要漏洞。

你对getDogs的调用是一个承诺,然而你并没有返回它或等待它,所以很可能这个调用从未被发出。

我的猜测是,你需要正确处理承诺,这样测试就不会在调用之前退出。

© www.soinside.com 2019 - 2024. All rights reserved.