Node.js MVC单元测试机车
我正在使用MotorveJS构建一个MVC应用程序。我一直在思考我应该写什么样的测试,我感到困惑 下面是应用程序中的不同组件-模型、视图、控制器、路由器和ORM 如果我必须对每个组件进行单元测试,下面是我认为应该采取的方法Node.js MVC单元测试机车,node.js,unit-testing,model-view-controller,testing,locomotivejs,Node.js,Unit Testing,Model View Controller,Testing,Locomotivejs,我正在使用MotorveJS构建一个MVC应用程序。我一直在思考我应该写什么样的测试,我感到困惑 下面是应用程序中的不同组件-模型、视图、控制器、路由器和ORM 如果我必须对每个组件进行单元测试,下面是我认为应该采取的方法 编写测试以确保ORM提供的API按照我期望的方式运行 对我的模型进行单元测试,并在ORM上进行存根。我为它提供存根,这样我就不必在单元测试中依赖于实际的数据库操作 控制器访问视图和模型。控制器的工作是获取/修改模型并响应客户端(渲染/重定向)。 可以通过向控制器提供测试输入
- 可以通过向控制器提供测试输入并检查是否生成了正确的响应来测试控制器的响应(清除
渲染
/
重定向
并确保进行了正确的调用)
- 通过剔除模型并确保正确调用,可以测试控制器对模型的操作。这感觉不对,因为我正在测试实现
test
环境中启动我的应用程序,并使用supertest
确保请求生成正确的响应—访问url,我获得正确的内容,正确的重定向等
我认为单元测试模型是有意义的,因为它表示与不同系统的交互(数据持久性)。我们想确保桥正常工作。路由器/控制器/视图在我们自己的系统内以非常特定的方式进行交互。因此,似乎可以对其进行集成测试。您的想法是什么?如果依赖集成测试,您将失去单元测试的好处。您的测试运行速度将比需要的慢,因此运行频率将降低。你的测试不会告诉你哪里坏了东西。您的测试将不会执行应用程序的大部分功能。您的测试的效果只有文档的一半。您将无法使用TDD
总的来说,每当有人为了提高速度而放弃单元测试时,他们都会走得更慢。您忘记了必须更改控制器代码,而更改控制器测试本应提醒您这一点。所以我称之为“杀戮不够”。@darch:我可能弄错了,但我认为这是讽刺:)。。。这是一个真正的问题。所以,如果这不是过火,那么人们在测试MVC应用程序时会这样做吗?像Rails这样的框架似乎更倾向于功能测试,这看起来很像集成测试。。