1

我在 github 上有一个(JavaScript)存储库,我想为它设置一个测试工具。

似乎“磁带”和“测试”应该做我想要的(带有漂亮 github 徽章的最小轻量级解决方案),除非有人有替代解决方案,但我正在努力如何设置。

我从未使用过 node.js,而且似乎磁带和测试(以及所有相关示例)都专注于 node.js。

任何人都可以建议一个简单的客户端 JavaScript 库测试工具的最小配置吗?我猜(?)我需要 nodejs、npm、package.json 等在本地运行磁带/测试,但我不清楚如何将我的(非节点)JavaScript 合并到测试工具中。

我目前拥有的大致如下:

myobj.js:

var MyObj = {};
MyObj.a = function() { return 'a'; }
MyObj.b = function() { return 'b'; }

myobj-sub.js:

MyObj.Sub = {};
MyObj.Sub.x = function() { return 'x'; }
MyObj.Sub.y = function() { return 'y'; }

这些当然通常会使用

<script src="myobj.js"></script>
<script src="myobj-sub.js"></script>

对于测试工具,我想我需要类似的东西:

var test = require('tape');
test('myobj', function(assert) {
    assert.equal('a', MyObj.a(), 'test a');
    assert.equal('x', MyObj.Sub.x(), 'test x');
    assert.end();
});

但我不确定在哪里填补空白!

(ps:我在Linux上运行,如果有什么不同的话)。

谢谢。

4

2 回答 2

3

你的问题没有太多的空白。你需要做什么:

  1. 安装 Node.js(这也将安装npm命令行工具)。这里的方法是特定于发行版的,在基于 Debian 的 Linux 发行版上,您可以这样做:
    sudo apt-get install nodejs
    
  2. 为您的项目设置目录结构:
    我的项目/
    |- 包.json
    |- myobj.js
    |- myobj-sub.js
    |- 测试/
        |- myobj.js
    
    您可以在 中指定许多不同的参数package.json但唯一重要的部分是devDependencies确保安装了测试工具:
    {
      “名称”:“我的项目”,
      “版本”:“1.0.0”,
      "description": "只是一些测试项目",
      “开发依赖”:{
        “磁带”:“~2.13.3”
      },
      “脚本”:{
        “测试”:“节点测试/*.js”
      }
    }
    
  3. 安装依赖项。既然在其中指定了它们,package.json只需从项目目录运行即可:
    npm 安装
    
    这会下载所有依赖项并将它们放入node_modules项目目录中的子目录中。
  4. 运行测试:
    npm 运行脚本测试
    

就是这样,测试正在运行。唯一的问题是它们失败了,因为您的脚本文件不使用CommonJS 格式。这是myobj.js应该的样子:

exports.a = function() { return 'a'; }
exports.b = function() { return 'b'; }

这是myobj-sub.js

exports.x = function() { return 'x'; }
exports.y = function() { return 'y'; }

最后test/myobj.js

var test = require('tape');
var MyObj = require('../myobj');
MyObj.Sub = require('../myobj-sub');
test('myobj', function(assert) {
    assert.equal('a', MyObj.a(), 'test a');
    assert.equal('x', MyObj.Sub.x(), 'test x');
    assert.end();
});

如果您现在重新运行测试,它们就会成功。

如果你想从网页中使用 CommonJS 模块怎么办?您可以为此使用browserify。安装浏览器:

sudo npm install -g browserify

并运行它来生成一个包:

browserify myobj.js myobj-sub.js -o bundle.js

bundle.js现在是一个可以被网页包含的脚本文件 - 然后网页将能够var MyObj = require('myobj');像测试一样做。

于 2014-07-16T08:43:30.807 回答
2

感谢@wladimir 和一些实验,我发现我可以安排一些事情,以便我可以使用标准函数表达式来构建我的代码,这样它就可以在浏览器中正常运行,也可以在 node.js 中运行。

我只需要将 module.exports 设置为定义的对象,并将 MyObj.Sub 设置为 'require' MyObj,(均屏蔽为仅在 CommonJs / node.js 中可见),如下所示:

myobj.js:

var MyObj = {};
MyObj.a = function() { return 'a'; }
MyObj.b = function() { return 'b'; }
if (typeof module!='undefined' && module.exports) module.exports = MyObj;

myobj-sub.js:

if (typeof module!='undefined' && module.exports) var MyObj = require('./myobj.js');
MyObj.Sub = {};
MyObj.Sub.x = function() { return 'x'; }
MyObj.Sub.y = function() { return 'y'; }
if (typeof module!='undefined' && module.exports) module.exports = MyObj.Sub;

(注意 './' 似乎对要求很重要)。

然后可以像往常一样将这些 JavaScript 文件与 <script> 元素一起拉入 HTML。

测试工具需要包含使用“require”的原始脚本:

var test = require('tape');
var MyObj = require('../myobj.js');
MyObj.Sub = require('../myobj-sub.js');
test('myobj', function(assert) {
    assert.equal(MyObj.a(), 'a', 'test a');
    assert.equal(MyObj.Sub.x(), 'x', 'test x');
    assert.end();
});

我对 btoa() / atob() 有点挣扎,但那是另一回事了。

于 2014-07-20T17:11:07.400 回答