当前位置: 首页 > 面试题库 >

如何使用Express测试一个单元的路由?

柳德义
2023-03-14
问题内容

我正在学习Node.js,并且一直在玩Express。真的很像框架;但是,我很难弄清楚如何为路由编写单元/集成测试。

能够对简单模块进行单元测试非常容易,并且已经通过Mocha完成了;但是,由于我传入的响应对象未保留值,因此使用Express进行的单元测试失败。

待测路由功能(routes / index.js):

exports.index = function(req, res){
  res.render('index', { title: 'Express' })
};

单元测试模块:

var should = require("should")
    , routes = require("../routes");

var request = {};
var response = {
    viewName: ""
    , data : {}
    , render: function(view, viewData) {
        viewName = view;
        data = viewData;
    }
};

describe("Routing", function(){
    describe("Default Route", function(){
        it("should provide the a title and the index view name", function(){
        routes.index(request, response);
        response.viewName.should.equal("index");
        });

    });
});

当我运行它时,它因“错误:检测到全局泄漏:viewName,数据”而失败。

  1. 我在哪里出错,以便可以正常工作?

  2. 有没有更好的方法可以在此级别对代码进行单元测试?

更新 1.由于我最初忘记了“ it()”,因此更正了代码段。


问题答案:

更改您的响应对象:

var response = {
    viewName: ""
    , data : {}
    , render: function(view, viewData) {
        this.viewName = view;
        this.data = viewData;
    }
};

它将起作用。



 类似资料:
  • 为了让单元测试跑一个批处理的任务,这个框架必须加载这个任务的ApplicationContext,两个注解的触发方式: @RunWith(SpringJUnit4ClassRunner.class):表明这个类需要使用Spring的测试工具 @ContextConfiguration(locations = {…}):表明哪些xml文件包含ApplicationContext @RunWith

  • 我是新手。我使用Gradle1.10和Ubuntu13。 我想知道是否有任何命令只执行一个单元测试类,类似于SBT中的。

  • 问题内容: 正如我们在http://docs.angularjs.org/tutorial/step_07中看到的那样, 建议通过e2e测试来完成路由测试, 但是,我认为’$ routeProvider’配置是通过单个函数function($ routeProvider)完成的,我们应该能够在不涉及浏览器的情况下进行单元测试,因为我认为路由功能不需要浏览器DOM。 例如, 当url为/ foo时,

  • 问题内容: 我有一个直接依赖RestTemplate的类。我希望我可以离线进行JUnit测试。 如何在单元测试中模拟RestTemplate? 问题答案: 我建议重构您的客户端代码,以 消除 对的直接依赖,并用对的引用替换它,该引用是由实现的。和您应该编码的那个。 然后,您可以在代码中插入存根或模拟对象以进行单元测试,并在将其用于实际时注入。

  • 我写了500多个单元测试方法。当我发出< code>ng test命令时。它开始测试所有的500种方法。 如果任何测试用例失败,它不会停止,仍然会继续执行所有方法。所以我需要等待更多的时间来再次重新运行单元测试。 我知道我们可以通过执行来存在,然后使用命令再次重新运行单元测试。这种方式也需要太多时间。 那么,如果任何一个测试失败,是否有可能停止(不存在)单元测试?