如何在 typescript 中使用 pact
How to use pact with typescript
我正在尝试使用 typescript 实现 pact-node。 (https://github.com/pact-foundation/pact-node)。我遇到了一些问题,生成的错误消息描述性不强。这可能是我在设置中做错了什么,很多在线可用的文档和示例都使用 pact.js 并且存在一些差异。下面是我的代码:
const path = require('path');
import { Pact } from '../../../node_modules/@pact-foundation/pact';
import { Interaction, InteractionObject } from '../../../node_modules/@pact-foundation/pact';
import { expect } from 'chai';
import { afterEach, before, beforeEach, describe, it, after } from 'mocha';
import { myService } from '../../main/typescript/service/test-service';
describe('My Pact Test', () => {
const port = 5428;
let service: myService;
const provider = new Pact({
port,
log: path.resolve(process.cwd(), 'logs', 'pact.log'),
dir: path.resolve(process.cwd(), 'pacts'),
spec: 2,
consumer: 'MyConsumer',
provider: 'MyProvider',
pactfileWriteMode: 'merge',
});
const EXPECTED_BODY = [{
'auctionStartTime': 1549652248000,
'auctionEndTime': 1549911448000,
'resolveTime': 1539670248000,
'openTimestamp': 1533496996000,
'closeTimestamp': 1547804158000,
'previewStartTime': 1549393048000,
}];
before(() => provider.setup());
after(() => provider.finalize());
afterEach(() => provider.verify());
describe ('should get items ', () => {
console.log ('message 1 ');
before(() => {
console.log ('message 2');
return provider.addInteraction({
state: 'item present in database,
uponReceiving: 'a request for items',
withRequest: {
method: 'GET',
path: 'path_to_my_api_endpoint,
headers: {
Accept: 'application/json',
},
},
willRespondWith: {
status: 200,
headers: {
'Content-Type': 'application/json',
},
body: EXPECTED_BODY,
},
});
});
it('returns the correct response', (done) => {
console.log ('message 3');
service.getInfo('123', '123')
.then((response: any) => {
expect(response.data).to.eql(EXPECTED_BODY);
done();
});
});
});
})
然而,当我尝试 运行 时,出现以下错误:
1) My Pact Test "before all" hook:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
2) My Pact Test "after all" hook:
Error: Failed to get the current sub/segment from the context.
at Object.contextMissingRuntimeError [as contextMissing] (node_modules/aws-xray-sdk-core/lib/context_utils.js:21:15)
at Object.getSegment (node_modules/aws-xray-sdk-core/lib/context_utils.js:92:45)
at Object.resolveSegment (node_modules/aws-xray-sdk-core/lib/context_utils.js:73:19)
at captureOutgoingHTTPs (node_modules/aws-xray-sdk-core/lib/patchers/http_p.js:67:31)
at captureHTTPsRequest (node_modules/aws-xray-sdk-core/lib/patchers/http_p.js:152:12)
at node_modules/popsicle/src/index.ts:126:30
at new WrappedPromise (node_modules/async-listener/es6-wrapped-promise.js:13:18)
at node_modules/popsicle/src/index.ts:112:16
at propagateAslWrapper (node_modules/async-listener/index.js:502:23)
at node_modules/async-listener/glue.js:188:31
at node_modules/async-listener/index.js:539:70
at node_modules/async-listener/glue.js:188:31
at <anonymous>
有人知道我做错了什么吗?或者失败了,有没有人有他们如何使用 typescript 实现协议的示例?
谢谢!
您没有使用 https://github.com/pact-foundation/pact-js 有什么原因吗?
Pact Node 是一个较低级别的库,可能不太适合您正在做的事情。 Pact JS 是您创建的更高级别的测试 DSL。
那里有一个 TypeScript 示例。
更新:您可能需要增加超时时间,看来您的系统启动模拟服务器的时间超过 2 秒,并且正在失败。
描述的第二个错误看起来与协议无关。
有时我看到更改节点端口也可以解决超时问题。
我正在尝试使用 typescript 实现 pact-node。 (https://github.com/pact-foundation/pact-node)。我遇到了一些问题,生成的错误消息描述性不强。这可能是我在设置中做错了什么,很多在线可用的文档和示例都使用 pact.js 并且存在一些差异。下面是我的代码:
const path = require('path');
import { Pact } from '../../../node_modules/@pact-foundation/pact';
import { Interaction, InteractionObject } from '../../../node_modules/@pact-foundation/pact';
import { expect } from 'chai';
import { afterEach, before, beforeEach, describe, it, after } from 'mocha';
import { myService } from '../../main/typescript/service/test-service';
describe('My Pact Test', () => {
const port = 5428;
let service: myService;
const provider = new Pact({
port,
log: path.resolve(process.cwd(), 'logs', 'pact.log'),
dir: path.resolve(process.cwd(), 'pacts'),
spec: 2,
consumer: 'MyConsumer',
provider: 'MyProvider',
pactfileWriteMode: 'merge',
});
const EXPECTED_BODY = [{
'auctionStartTime': 1549652248000,
'auctionEndTime': 1549911448000,
'resolveTime': 1539670248000,
'openTimestamp': 1533496996000,
'closeTimestamp': 1547804158000,
'previewStartTime': 1549393048000,
}];
before(() => provider.setup());
after(() => provider.finalize());
afterEach(() => provider.verify());
describe ('should get items ', () => {
console.log ('message 1 ');
before(() => {
console.log ('message 2');
return provider.addInteraction({
state: 'item present in database,
uponReceiving: 'a request for items',
withRequest: {
method: 'GET',
path: 'path_to_my_api_endpoint,
headers: {
Accept: 'application/json',
},
},
willRespondWith: {
status: 200,
headers: {
'Content-Type': 'application/json',
},
body: EXPECTED_BODY,
},
});
});
it('returns the correct response', (done) => {
console.log ('message 3');
service.getInfo('123', '123')
.then((response: any) => {
expect(response.data).to.eql(EXPECTED_BODY);
done();
});
});
});
})
然而,当我尝试 运行 时,出现以下错误:
1) My Pact Test "before all" hook:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
2) My Pact Test "after all" hook:
Error: Failed to get the current sub/segment from the context.
at Object.contextMissingRuntimeError [as contextMissing] (node_modules/aws-xray-sdk-core/lib/context_utils.js:21:15)
at Object.getSegment (node_modules/aws-xray-sdk-core/lib/context_utils.js:92:45)
at Object.resolveSegment (node_modules/aws-xray-sdk-core/lib/context_utils.js:73:19)
at captureOutgoingHTTPs (node_modules/aws-xray-sdk-core/lib/patchers/http_p.js:67:31)
at captureHTTPsRequest (node_modules/aws-xray-sdk-core/lib/patchers/http_p.js:152:12)
at node_modules/popsicle/src/index.ts:126:30
at new WrappedPromise (node_modules/async-listener/es6-wrapped-promise.js:13:18)
at node_modules/popsicle/src/index.ts:112:16
at propagateAslWrapper (node_modules/async-listener/index.js:502:23)
at node_modules/async-listener/glue.js:188:31
at node_modules/async-listener/index.js:539:70
at node_modules/async-listener/glue.js:188:31
at <anonymous>
有人知道我做错了什么吗?或者失败了,有没有人有他们如何使用 typescript 实现协议的示例?
谢谢!
您没有使用 https://github.com/pact-foundation/pact-js 有什么原因吗?
Pact Node 是一个较低级别的库,可能不太适合您正在做的事情。 Pact JS 是您创建的更高级别的测试 DSL。
那里有一个 TypeScript 示例。
更新:您可能需要增加超时时间,看来您的系统启动模拟服务器的时间超过 2 秒,并且正在失败。
描述的第二个错误看起来与协议无关。
有时我看到更改节点端口也可以解决超时问题。