我在消费者端的契约JS实现中出现了一个错误。当我试图运行我的测试时,我会得到以下错误:
Pact stop failed; tried calling service 10 times with no result.如果有任何帮助,请在下面附加代码片段:
import Pact from "pact";
import wrapper from "@pact-foundation/pact-node";
const mockEventsService = wrapper.createServer({
port: 1234,
spec: 2
});
let provider;
beforeEach(done => {
mockEventsService
.start()
.then(() => {
provider = Pact({
consumer: "Frontend",
provider: "Backend",
port: 1234
});
done();
})
.catch(err => catchAndContinue(err, done));
});
afterAll(() => {
wrapper.removeAllServers();
});
afterEach(done => {
mockEventsService
.delete()
.then(() => {
done();
})
.catch(err => catchAndContinue(err, done));
});
function catchAndContinue(err, done) {
fail(err);
done();
}在试验本身:
afterEach(done => {
provider
.finalize()
.then(() => done())
.catch(err => catchAndContinue(err, done));
});任何帮助都将不胜感激。我是新来的,不知道怎么解决这个问题。
使用pact: 4.2.1和@pact-foundation/pact-节点: 6.0.0
发布于 2017-11-24 05:31:13
我猜这是因为您调用的是delete,而不是afterEach中的stop。Delete将停止服务,并尝试完全删除类的实例。
就我个人而言,我不喜欢创建一个随后启动/停止的服务,因为您停止了并发测试的运行。我更喜欢的方法是为随机端口上的每个测试创建一个新的pact实例(为您这样做),然后在最后删除它。这样,每次都保证有一个新的实例。这个看起来是这样的:
import Pact from "pact";
import PactNode from "@pact-foundation/pact-node";
describe("Some Test Suite", () => {
let provider;
let mockService;
beforeEach(() => {
let mockService = wrapper.createServer({ spec: 2 });
return mockService
.start()
.then(() => {
provider = Pact({
consumer: "Frontend",
provider: "Backend",
port: mockService.options.port // pact-node listens to a randomized, unused port by default
});
}, fail);
});
afterEach(() => mockEventsService.delete().catch(fail));
}看起来,无论是使用Jasmine还是Mocha,这两个框架都支持承诺,只要您将承诺作为函数的一部分返回,因此不需要到处都使用done函数。在这种情况下,我让pact选择在哪个端口上运行,然后提供者使用端口选项(如果没有具体设置,它将由pact节点自动填充)。
无论哪种方式,这都应该适用于您的情况,因为您没有试图停止已经被删除的服务器:)
https://stackoverflow.com/questions/47441891
复制相似问题