在前端开发中,我们常常需要跟后端的API进行集成,使前端的应用可以与后端的服务交互。一旦API变化频繁或者需要预先约定接口,那么单元测试集成将变得颇为不便。这个时候,你就需要使用mock server工具。ember-cli-pact 便是一个帮助你快量创建mock server的npm包,本文将扼要地介绍该包的使用方法。
ember-cli-pact是什么?
Pact是一个用于前后端集成测试和断言的工具,其中 ember-cli-pact
可以帮助前端开发快速创建Pact Mock Server并与其协作。
安装和配置
首先,需要使用ember-cli安装ember-cli-pact :
ember install ember-cli-pact
完成后,你将看到下列的文件被自动添加到你的应用中:
- pact-mock-service.js 用来启动mock server
- /pacts 用来存储pact测试协议的JSON文件
我们还需要安装@pact-foundation/pact-node
,它是Pact的node版本,用来与Pact Mock Service进行协作:
npm install --save-dev @pact-foundation/pact-node
接着,我们需要创建一个Pact Helper来处理创建pact协议的相关操作。
ember generate pact-helper
此时,在tests/helpers/pact.js中会产生如下代码:
import { setupPact } from 'ember-cli-pact'; import config from '../../config/environment'; export function setupPactForProvider(providerName, opts) { setupPact(providerName, config, opts); }
其中参数opts是Pact的配置对象。关于设置多个provider、设置异步timeout和使用参数的可解析组参照Pact Help文档。
创建 Pact Mock Service
我们将在测试中编写Pact测试,并在本地启动Pact Mock Service,然后在测试中使用它来验证测试结果。以下演示了创建一个简单测试的步骤。
首先,在test目录下创建一个新的测试"Pact Consumer Test" :
ember generate acceptance-test "pact-consumer-test"
在 "pact-consumer-test"中编写创建 pact 和数据驱动测试的代码
-- -------------------- ---- ------- -- -------------------------------------- ------ - -------------------- - ---- ------------------ ------ - ------- ---- - ---- -------- ------ - -------------------- - ---- -------------- ------ - ----- - ---- ---------------------- ------------------ - ---- -------- ------ --------------- - ---------------------------------- - ---------------- ----------------------- --- ---------------------------- --------- ------ ---- --- - --------- ----- ---------------- - ----- - ----------- - - ---------- ----- ------------ - - ---- -------- -- --- ------------ - --- ------------------- ------ --- ---- --------- -------------- -- ------- --- ---- ------ ------------ - ------- ------ ----- ------------- -- ---------------- - ------- ---- -------- ---------------- -------------------- ----- ------------ - --- ----- ------------------------------------------ ----- ----------- ---------------------- -------------- ---------- --- ---
在上面代码中,我们首先调用了 setupPactForProvider
方法,该方法用于初始化Pact Mock Server。之后,我们定义了需要Mock的数据,最后我们再次调用mockService.addInteractions
方法将交互数据Mock到Pact Mock Server。最后,我们将在我们的页面上使用模拟的数据。
运行测试和 Pact Mock Server
有两种启动Pact Mock Server的方法:从命令线启动和在测试中调用。以下演示了在测试中启动Pact Mock Server的方法。
在测试运行前,我们需要为Pact Mock Server指定一个端口,避免与其他测试重叠。我们需要正式占用Mock Server端口,因此应用启动语句如下:
PORT=1234 ember t --filter="Acceptance | pact"
运行测试,Pact Mock Server就会自动启动。当测试结束后,Mock Server也就关闭了,下一次运行测试时服务端口就会自动释放。
结论
如上所述,ember-cli-pact
简化界面集成测试的流程。Pact Mock Server就像一个虚拟的后端服务,其与测试并行执行。在测试中,我们可以与它进行交互,以验证我们的前端是否可以正确与后端进行交互。如果你的程序与后端API密切流程,那么 ember-cli-pact
无疑是你不可或缺的工具之一。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60067357890c4f7277583dad