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'; }

もちろん、これらは通常、次を使用して HTML に取り込まれます。

<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. プロジェクトのディレクトリ構造をセットアップします。
    私のプロジェクト/
    |- package.json
    |- myobj.js
    |- myobj-sub.js
    |- テスト/
        |- myobj.js
    
    では多くの異なるパラメータを 指定できますがpackage.json、唯一の重要な部分はdevDependencies、テスト ハーネスがインストールされていることを確認することです。
    {
      "名前": "myproj",
      "バージョン": "1.0.0",
      "description": "テスト プロジェクト",
      "devDependencies": {
        「テープ」:「~2.13.3」
      }、
      "スクリプト": {
        "test": "node test/*.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();
});

ここでテストを再実行すると、成功します。

Web ページから CommonJS モジュールを使用したい場合はどうすればよいでしょうか? そのためにbrowserifyを使用できます。browserify をインストールします。

sudo npm install -g browserify

それを実行してバンドルを生成します。

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

bundle.jsは、Web ページに含めることができるスクリプト ファイルになりました。これにより、Web ページvar MyObj = require('myobj');はテストと同じように実行できるようになります。

于 2014-07-16T08:43:30.807 に答える
2

@wladimir と少しの実験のおかげで、標準の関数式を使用してコードを構成できるように調整できることがわかりました。これにより、ブラウザーで通常どおり実行され、node.js でも実行されます。

次のように、module.exports を定義済みのオブジェクトに設定し、MyObj.Sub を MyObj を「require」に設定するだけです (どちらも 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;

('./' は、require にとって重要であるように思われることに注意してください)。

これらの 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 に答える