除了提供者与 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();