我们一直在尝试测试从一个微服务(比如 GET /contacts)公开的 API,该微服务正在被另一个微服务使用。
为了避免集成测试,我们创建了消费者驱动的契约测试,消费者微服务在其中创建契约并将它们发布到代理,生产者将从那里单独验证契约。
我们已经使用Pact IO来实现这一点,到目前为止它已经相当不错了。
现在我们在尝试进行详尽的测试时遇到了一些问题,我们想看看如何从 GET /contacts 返回一个空列表。
问题是:在添加交互时,我们可以使用提供者状态,但是我们找不到一种方法来区分编写测试以从 GET /contacts 获取联系人列表和在另一个测试中获取空列表。
这就是我们在消费者微服务中创建契约测试的方式:
mockServer.start()
.then(() => {
provider = pact({
// config
})
return provider.addInteraction({
state: 'Get all contacts',
uponReceiving: 'Get all contacts',
withRequest: {
method: 'GET',
path: '/contacts',
headers: {
Accept: 'application/json; charset=utf-8'
}
},
willRespondWith: {
status: 200,
body: //list of all contacts
}
})
.then(() => {
return provider.addInteraction({
state: 'Get empty list of contacts',
uponReceiving: 'Get empty list of contacts',
withRequest: {
method: 'GET',
path: '/contacts',
headers: {
Accept: 'application/json; charset=utf-8'
}
},
willRespondWith: {
status: 200,
body: [] // empty list
}
})
})
我们无法在测试中找到区分这些交互的方法!:(
任何帮助,将不胜感激!
谢谢。