除了提供者与 Pact 的交互声明之外,我们还需要断言吗?
Do we need assertions in addition to the provider interaction declaration with Pact?
我正在研究 pact
,我经常看到在合同测试部分对请求的响应进行断言的示例,例如
test('Check endpoint for post questions on success', async () => {
await provider.addInteraction(…);
const response = await createQuestion(…);
expect(response.status).toBe(201); // <------------
});
问题
在请求的响应中添加此类断言是否对合同测试有附加价值?或者声明交互嵌入了合约测试的全部价值。
简而言之,没有。
我个人不会做出这样的断言,因为所有这些只是检查 Pact 是否按照您的要求进行 - 即测试模拟。
将 Pact 测试视为 API 客户端的单元测试,它恰好也产生了一个契约。
因此,检查正在测试的 API 客户端的行为更为重要,Pact 稍后会实际检查提供者的真实响应。
在你的情况下,我希望 createQuestion
到 return 一些有用的数据(或者可能是 Question
域模型),所以你应该检查该对象是否正确。例如
const question = await createQuestion(...);
expect(question.id).toBeDefined();
我正在研究 pact
,我经常看到在合同测试部分对请求的响应进行断言的示例,例如
test('Check endpoint for post questions on success', async () => {
await provider.addInteraction(…);
const response = await createQuestion(…);
expect(response.status).toBe(201); // <------------
});
问题
在请求的响应中添加此类断言是否对合同测试有附加价值?或者声明交互嵌入了合约测试的全部价值。
简而言之,没有。
我个人不会做出这样的断言,因为所有这些只是检查 Pact 是否按照您的要求进行 - 即测试模拟。
将 Pact 测试视为 API 客户端的单元测试,它恰好也产生了一个契约。
因此,检查正在测试的 API 客户端的行为更为重要,Pact 稍后会实际检查提供者的真实响应。
在你的情况下,我希望 createQuestion
到 return 一些有用的数据(或者可能是 Question
域模型),所以你应该检查该对象是否正确。例如
const question = await createQuestion(...);
expect(question.id).toBeDefined();