Я пытаюсь имитировать Angular Rest API с помощью Pact.js, но получаю ошибку Failed: Actual interactions do not match expected interactions for mock MockService.
Мой оригинальный API вызывается вместо имитируемого сервера. Когда я пытаюсь ПОЛУЧИТЬ http://localhost:1234/users (макет api сервера пакта).
Получаю результат: {"message":"No interaction found for GET /","interaction_diffs":[]}
Ожидаемое поведение: фактический вызов Rest API перенаправляется на фиктивный сервер, и я должен получить фиктивный вывод. (см. ожидаемый пользователь в приведенном ниже коде.), а не фактический результат api.
Ниже мой код:
Karma.conf.js
...
pact: [{
cors: true,
port: 1234,
consumer: "ui",
provider: "usersservice",
host: '127.0.0.1',
dir: "pacts/",
spec: 2
}],
proxies: {
// below is a fake rest API I'm trying to mock.
'http://jsonplaceholder.typicode.com/users': 'http://localhost:1234/users'
},
...
user.service.pact.spec.ts
import { TestBed } from '@angular/core/testing';
import { HttpClientModule } from '@angular/common/http';
import { UsersService } from './shared/users.service';
import { User } from './shared/user';
import { PactWeb, Matchers } from '@pact-foundation/pact-web';
describe('UsersService pack test', () => {
let provider;
beforeAll(function (done) {
provider = new PactWeb({
cors: true,
consumer: 'ui',
provider: 'users-service',
port: 1234,
host: '127.0.0.1',
});
// required for slower CI environments
setTimeout(done, 2000);
// Required if run with `singleRun: false`
provider.removeInteractions();
});
afterAll(function (done) {
provider.finalize()
.then(function () {
done();
}, function (err) {
done.fail(err);
});
});
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
HttpClientModule
],
providers: [
UsersService
],
});
});
afterEach((done) => {
provider.verify().then(done, e => done.fail(e));
});
describe('getUsers()', () => {
const expectedUser: User[] = [{
"id": 9,
"name": "test user",
"email": "[email protected]",
"phone": "1-999-999-9999 x99999",
}];
beforeAll((done) => {
provider.addInteraction({
state: `provider return a expected user array`,
uponReceiving: 'a request to GET a person',
withRequest: {
method: 'GET',
path: 'http://jsonplaceholder.typicode.com/users',
},
willRespondWith: {
status: 200,
body: expectedUser, // to respond with defined data.
headers: {
'Content-Type': 'application/json'
}
}
}).then(done, error => done.fail(error));
});
it('should get Person array', (done) => {
const usersService: UsersService = TestBed.get(UsersService);
usersService.getUsers().subscribe(response => {
console.log(response) // this logs actual API response not mocked.
expect(response).toEqual(expectedUser); // this fails
done();
}, error => {
done.fail(error);
});
});
});
});
Я следил за приведенными ниже источниками, но просто не мог создавать и перенаправлять на имитируемый API
https://reflectoring.io/consumer-driven-contracts-with-angular-and-pact/
https://github.com/thombergs/code-examples/tree/master/pact/pact-angular
user.service.pact.spec.ts
- person anoop   schedule 26.07.2018