2

我在为 NodeJS + Backbone 应用程序设置测试框架时遇到了问题,其中出现了常量“require is not defined”错误。我终于使用浏览器内测试框架让它工作了,该框架可以获取我需要的所有依赖项并运行 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("");
            }
        })
    });

});

测试运行器.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>
4

1 回答 1

3

require而 commonjs 仅适用于 Node.js

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

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

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

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

于 2013-10-08T21:16:36.960 回答