Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MVC单元测试机车_Node.js_Unit Testing_Model View Controller_Testing_Locomotivejs - Fatal编程技术网

Node.js MVC单元测试机车

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上进行存根。我为它提供存根,这样我就不必在单元测试中依赖于实际的数据库操作 控制器访问视图和模型。控制器的工作是获取/修改模型并响应客户端(渲染/重定向)。 可以通过向控制器提供测试输入

我正在使用MotorveJS构建一个MVC应用程序。我一直在思考我应该写什么样的测试,我感到困惑

下面是应用程序中的不同组件-模型、视图、控制器、路由器和ORM

如果我必须对每个组件进行单元测试,下面是我认为应该采取的方法

  • 编写测试以确保ORM提供的API按照我期望的方式运行
  • 对我的模型进行单元测试,并在ORM上进行存根。我为它提供存根,这样我就不必在单元测试中依赖于实际的数据库操作
  • 控制器访问视图和模型。控制器的工作是获取/修改模型并响应客户端(渲染/重定向)。
    • 可以通过向控制器提供测试输入并检查是否生成了正确的响应来测试控制器的响应(清除
      渲染
      /
      重定向
      并确保进行了正确的调用)
    • 通过剔除模型并确保正确调用,可以测试控制器对模型的操作。这感觉不对,因为我正在测试实现
  • 视图只是模板;控制器用值绑定模板。我可以创建一个假视图模型并将其绑定到视图,然后查看是否生成了正确的输出
  • Routes只需接收请求并将其映射到正确的控制器和操作。我可以通过删除路由器的部分并确保向路由器发出的请求映射到预期的控制器/操作,确保应用程序支持正确的路由
  • 假设我现在更改一个模型API,我必须更改模型测试,我必须更改控制器测试使用的模型存根,我必须更新控制器测试中的断言

    这似乎有些过分。

    这有意义吗

    按上述步骤执行1和2

    三,。集成测试其余部分(控制器/视图/路由器)。在这里,我认为我应该在
    test
    环境中启动我的应用程序,并使用
    supertest
    确保请求生成正确的响应—访问url,我获得正确的内容,正确的重定向等


    我认为单元测试模型是有意义的,因为它表示与不同系统的交互(数据持久性)。我们想确保桥正常工作。路由器/控制器/视图在我们自己的系统内以非常特定的方式进行交互。因此,似乎可以对其进行集成测试。您的想法是什么?

    如果依赖集成测试,您将失去单元测试的好处。您的测试运行速度将比需要的慢,因此运行频率将降低。你的测试不会告诉你哪里坏了东西。您的测试将不会执行应用程序的大部分功能。您的测试的效果只有文档的一半。您将无法使用TDD


    总的来说,每当有人为了提高速度而放弃单元测试时,他们都会走得更慢。

    您忘记了必须更改控制器代码,而更改控制器测试本应提醒您这一点。所以我称之为“杀戮不够”。@darch:我可能弄错了,但我认为这是讽刺:)。。。这是一个真正的问题。所以,如果这不是过火,那么人们在测试MVC应用程序时会这样做吗?像Rails这样的框架似乎更倾向于功能测试,这看起来很像集成测试。。