使用Jest / Enzyme测试Axios Post插入/更新

时间:2018-10-12 23:17:56

标签: database reactjs unit-testing jestjs enzyme

我开始学习使用Enzyme / Jest进行React测试。我要使用的一些测试是查看是否在数据库中插入/更新了某些内容。我想知道如何使用axios对此进行测试。我听说过axios-mock-adapter,并且可能会使用它。有没有一种方法可以模仿数据库插入/更新调用,而无需在实际数据库中实际插入/更新条目?

例如: 我有一个向api端点发出发布请求的方法,该端点将新条目插入数据库中的表中。有没有一种方法可以用Jest / Enzyme进行测试

  1. 数据库未修改

  2. 如果可以用实际的数据库执行,我可以以某种方式得到一个响应,告诉我api调用成功。

我不确定这是否应该在react上进行测试,或者最好在数据库的后端进行。

我对此仍然很陌生,因此任何帮助/提示都将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议在后端进行测试。

运行测试时,一个好的做法是使用可用于测试的本地数据库在本地运行您的应用程序。您不想像您所说的那样使用已部署的应用程序并向其发送axios请求,从而更新实际的数据库。另外,Jest喜欢以所需的顺序运行测试,因此,当您不知道已经发生什么并且没有将其插入数据库时​​,很难期望返回某些数据。

使用设置和拆卸方法。通常,每个测试套件都应设置您的服务器,最后还应“拆除”。将测试套件按每种路线/模型分开。这是一个好主意,因为当您要模拟数据或测试插入路由时,您不希望它影响其他测试。因此,在每次测试之后,您也可以截断您模拟/插入的所有数据。

示例:

test('GET /cats get all cats', () => {
   // Mock 100 of cats
   // Send axios request for all cats
   // Assert 100 cats returned.
});

test('POST /cats insert a cat and then get all should be 1', () => {
   // Send axios request inserting 1 cat with data
   // Send axios request to get that 1 cat.
   // Assert returned cat matches data sent.
});

如果按顺序进行了上述测试,您将无后顾之忧。但是由于测试没有切换的特定顺序,因此您的顶级测试将失败,因为它将返回101只猫。为了防止这种情况发生,您需要设置和拆卸...

玩笑的例子:

beforeAll(//Start server);
afterAll(//Stop server);
afterEach(//Truncate cats);

test('GET /cats get all cats', () => {
   // Mock 100 of cats
   // Send axios request for all cats
   // Assert 100 cats returned.
});

test('POST /cats insert a cat and then get all should be 1', () => {
   // Send axios request inserting 1 cat with data
   // Send axios request to get that 1 cat.
   // Assert returned cat matches data sent.
});