测试同构javascript应用程序

测试同构javascript应用程序,javascript,testing,Javascript,Testing,我有一个Javascript应用程序,它由客户端代码和服务器端(Node/Express)代码组成。是否有一个测试解决方案同时覆盖客户端和服务器,或者您必须为每个客户端和服务器运行单独的测试框架 我问的原因是因为我试图在客户端和服务器之间共享代码,例如生成唯一id的帮助函数。这是个好主意,还是最好将关注点分开?这是一个复杂的问题,有多个答案。tl;dr您可以在服务器端进行大量测试,但通常在某个时候您最终需要客户端测试 在许多方面,尽管javascript应用程序可以是同构的,但当涉及全局和语言特

我有一个Javascript应用程序,它由客户端代码和服务器端(Node/Express)代码组成。是否有一个测试解决方案同时覆盖客户端和服务器,或者您必须为每个客户端和服务器运行单独的测试框架


我问的原因是因为我试图在客户端和服务器之间共享代码,例如生成唯一id的帮助函数。这是个好主意,还是最好将关注点分开?

这是一个复杂的问题,有多个答案。tl;dr您可以在服务器端进行大量测试,但通常在某个时候您最终需要客户端测试

在许多方面,尽管javascript应用程序可以是同构的,但当涉及全局和语言特性时,客户端与服务器端的实际执行环境是非常不同的。要想成为一名测试方面的完备性测试人员,需要同时进行客户端和服务器端测试

从更实际的角度来看——根据javascript应用程序的实现和模块化程度,可以选择使用以下方法最小化或完全消除客户端测试: -使用
jsdom
替换节点中的domapi -对于同构React应用程序,使用
jest
+
React加载项测试UTIL
和/或
enzyme
作为组件实例的测试工具 -根据需要删除浏览器全局文件,并单独测试模块

不过,在某些时候,您几乎总是希望启动浏览器进行“真实世界”测试。这可能以整体解决方案的形式出现,如
karma
或使用
mocha
+
browserify
/
webpack
进行单元测试或
nightwatch
进行集成/验收测试


除了浏览器全局性之外,服务器端测试和客户端测试之间的另一个重要区别是服务器端测试从来没有任何动态行为。这完全取决于客户。您的应用程序依赖于浏览器功能,而不是同构库功能(如pure React),因此您会发现越来越需要客户端测试。

这是一个复杂的问题,有多种答案。tl;dr您可以在服务器端进行大量测试,但通常在某个时候您最终需要客户端测试

在许多方面,尽管javascript应用程序可以是同构的,但当涉及全局和语言特性时,客户端与服务器端的实际执行环境是非常不同的。要想成为一名测试方面的完备性测试人员,需要同时进行客户端和服务器端测试

从更实际的角度来看——根据javascript应用程序的实现和模块化程度,可以选择使用以下方法最小化或完全消除客户端测试: -使用
jsdom
替换节点中的domapi -对于同构React应用程序,使用
jest
+
React加载项测试UTIL
和/或
enzyme
作为组件实例的测试工具 -根据需要删除浏览器全局文件,并单独测试模块

不过,在某些时候,您几乎总是希望启动浏览器进行“真实世界”测试。这可能以整体解决方案的形式出现,如
karma
或使用
mocha
+
browserify
/
webpack
进行单元测试或
nightwatch
进行集成/验收测试


除了浏览器全局性之外,服务器端测试和客户端测试之间的另一个重要区别是服务器端测试从来没有任何动态行为。这完全取决于客户。您的应用程序依赖于浏览器功能,而不是同构库功能(例如pure React),那么您会发现越来越需要客户端测试。

我问这个问题的原因是因为我试图在客户端和服务器之间共享代码,例如生成唯一id的帮助函数。这是个好主意吗,还是最好将关注点分开?如果您正在测试的代码不依赖于浏览器全局变量(DOM、位置、存储,例如…),那么请务必在服务器上测试它。我问的原因是因为我试图在客户端和服务器之间共享代码,例如生成唯一id的帮助函数。这是个好主意吗,还是最好将关注点分开?如果您正在测试的代码不依赖于浏览器全局变量(DOM、位置、存储,例如…),那么无论如何,只需在服务器上测试它