【问题标题】:Testing NodeJS with Mocha - "Require is not defined"用 Mocha 测试 NodeJS - “Require is not defined”
【发布时间】:2013-10-09 05:16:36
【问题描述】:

我在为 NodeJS + Backbone 应用程序设置测试框架时遇到了问题,并且出现“未定义要求”错误。我终于使用浏览器内的测试框架让它工作了,该框架提取了我需要的所有依赖项并运行了一个 test.js 文件。

目前,我只对我的 Backbone 模型、视图和集合进行基本测试。现在,我想添加 API 测试,但我又回到了同样的“未定义要求”错误。这是什么原因造成的?很明显,我在这里遗漏了一些基本的东西。我只想补充:

var request = require('supertest')
  , express = require('express');

var app = express();

test.js 片段:

describe('Application', function(){
  it("creates a global variable for the namespace", function() {
    should.exist(App);
  })
});


describe('Models', function() {

    describe('SearchFormModel', function() {
        beforeEach(function() {
            this.SearchFormModel = new App.Model.SearchFormModel();
            this.defaultFields = this.SearchFormModel.attributes;
        })

        it("created a SearchFormModel", function() {
            should.exist(this.SearchFormModel);
        })

        it("should have 7 default fields", function() {
            Object.keys(this.SearchFormModel).length.should.equal(7);
        })

        it("should default all fields to empty string", function() {
            for (var key in this.defaultFields) {
                this.defaultFields[key].should.equal("");
            }
        })
    });

});

test-runner.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- Title &amp; Meta -->
    <title>Frontend tests</title>
    <meta charset="utf-8">

    <!-- Stylesheets -->
    <link rel="stylesheet" href="../node_modules/mocha/mocha.css">
</head>

<body>

    <div id="mocha"></div>

    <!-- Testing Libraries -->
    <script src="../node_modules/mocha/mocha.js"></script>
    <script src="../node_modules/chai/chai.js"></script>
    <script>
        // Use the expect version of chai assertions - http://chaijs.com/api/bdd
        var should = chai.should();

        // Tell mocha we want TDD syntax
        mocha.setup('tdd');
    </script>

    <!-- Libs -->
    <script src="../public/lib/jquery-1.8.2.min.js"></script>
    <script src="../public/lib/underscore-min.js"></script>
    <script src="../public/lib/backbone-min.js"></script>
    <script src="../public/lib/bootstrap.min.js"></script>
    <script src="../public/lib/highcharts.js"></script>
    <script src="../public/lib/bootstrap-datepicker.js"></script>
    <script src="../public/js/modules/exporting.js"></script>

    <!-- Source files -->
    <script src="../public/js/namespace.js"></script>
    <script src="../public/js/jst.js"></script>            
    <script src="../public/js/utils.js"></script>
    <script src="../public/js/models/models.js"></script>
    <script src="../public/js/models/search.js"></script>
    <script src="../public/js/models/plot.js"></script>
    <script src="../public/js/models/search_result.js"></script>
    <script src="../public/js/views/header.js"></script>
    <script src="../public/js/views/plot.js"></script>
    <script src="../public/js/views/list.js"></script>
    <script src="../public/js/views/search.js"></script>
    <script src="../public/js/router.js"></script>   
    <script src="../public/js/app.js"></script>    

    <!-- Test -->
    <script src="test.js"></script>

    <script>
        mocha.run();
    </script>

</body>
</html>

【问题讨论】:

    标签: node.js backbone.js


    【解决方案1】:

    require 和 commonjs 仅适用于 Node.js

    如果您运行浏览器测试,那么您需要像在浏览器中运行一样对其进行编码。另请注意,单元测试应单独进行,您无需加载应用服务器(快速)即可运行测试。

    我想从那里向您指出一个简单的解决方案,但是选择太多了。基本上,您应该通过加载 html 文件开始在浏览器中运行浏览器测试。

    然后,您需要自动执行此操作并从终端运行浏览器测试。那时您想在 PhantomJs 中运行测试并在终端上输出浏览器结果。围绕这一点,您可以查看 Karma 和 Testem,他们是两个浏览器测试运行器(请记住,此处仅 Mocha 不会通过命令行运行浏览器测试)。

    当您使用 Backbone 时,您可能会对作为起点的 Backbone-Boilerplate Karma + Grunt 测试设置感兴趣。在此处查看更多信息:https://github.com/backbone-boilerplate/backbone-boilerplate

    【讨论】:

    • 忘记接受,但感谢您的帮助!我最终采纳了您使用 PhantomJs 进行浏览器测试的建议。
    • @JanusTroelsen 这不正确。 Require 在浏览器中不起作用,webpack 和 browserify 预编译你的 commonjs 代码以在浏览器内部兼容。这是一个重要的区别。
    • @JanusTroelsen 另请注意,这是 2013 年的答案。
    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 2022-12-01
    • 2019-09-29
    • 2013-08-14
    • 2021-03-29
    • 2017-02-25
    相关资源
    最近更新 更多