契约.js
,但得到错误
Failed: Actual interactions do not match expected interactions for mock MockService.
当我试图得到
http://localhost:1234/users
(模拟的pact服务器api。)
{"message":"No interaction found for GET /","interaction_diffs":[]}
预期行为:
实际的Rest API调用被转移到模拟服务器,我应该得到模拟输出。(请参见下面代码中的expectedUser.),而不是实际的api结果。
以下是我的代码:
业力形态
...
pact: [{
cors: true,
port: 1234,
consumer: "ui",
provider: "usersservice",
host: '127.0.0.1',
dir: "pacts/",
spec: 2
}],
proxies: {
'http://jsonplaceholder.typicode.com/users': 'http://localhost:1234/users'
},
...
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',
});
setTimeout(done, 2000);
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": "test@user.xyz",
"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,
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)
expect(response).toEqual(expectedUser);
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