我应该如何组织我的单元和集成testing?

我正在与什么将变成一个相当大的node.js为基础的JavaScript应用程序,并开始考虑如何组织我的testing。
应用程序基本上是一个REST API,所以请求被authentication,用户提交的数据被validation,然后保存在数据库中。

对于如何组织这个规模的项目的testing,我完全不熟悉。

我应该从模块化unit testing开始分别testing每个资源,最后是全面的集成testing吗?
或者我应该testing分层 – 即validation,validation,持久性和整合分别为每个资源?

什么是常识?

没有正确或错误的testing方法。 重要的是要有有意义的testing,增值。 有一些testing比没有任何东西更好。

我的方法是编写testing我正在工作的东西,而不区分单元和集成testing。 所以,如果我正在使用REST服务,那么我将为REST服务编写testing。 如果我正在进行身份validation,持久性,那么我将编写testing用于身份validation,持久性。

编写也可以设置和pipe理testing所需的testing数据的testing也很重要。 这很重要,以便任何人都可以执行你的testing。 开箱即用的持续集成环境下执行testing也很重要。

testing您修复的每个缺陷

如果我正在做一个缺陷,那么我会写testing失败,即重现缺陷,然后validation我的testing通过我的代码修复后。 这在我看来是最重要的事情。 因为这些testingvalidation了一旦修复的问题保持不变。

重构代码

当你做一些代码重构时,你写的所有testing的价值变得非常方便。 如果你的重构代码不能通过你现有的testing,那么你的重构代码就会被破坏,需要被修复,直到你所有的testing通过。

当你没有时间

如果由于缺乏时间或其他原因而必须在testingtypes中进行select,那么编写更广泛的testing或者端到端testing或集成testing会给这些testing带来最大的价值,因为这些testing直接或间接地执行身份validation,持久性等。 将此与持久性unit testing进行比较,您将得到更多的集成testing,因为集成testing将间接testing您的持久性。