4

これは私の前の質問へのフォローアップです。

クライアント側のコードで使用する関数をcalculate.js含むソース ファイルを作成しているとします。calculate

関数計算(数値){
    数値 * 2 を返します。
}

今、私はそれをテストしたいと思います。

この記事nodeunitで説明されているように使用し、関数をエクスポートします (テストが呼び出せるようにするため)。calculate

関数計算(数値){
    数値 * 2 を返します。
}

exports.calculate = calculate // Node.js のもの。ブラウザでは動かない!

テストはnodeunit正常に実行calculate.jsされますが、exports.

今ではキャッチのように見えます。この問題を解決できますか?

4

5 に答える 5

3

jasminebdd や jstestdriver などの Node.js 以外のテスト フレームワークを使用します。

于 2012-06-24T08:44:15.200 に答える
2

ブラウザでのテストの実行

テスト スイートに (エクスポートを使用して) CommonJS 形式を使用する場合は、ブラウザー用の CommonJS ツールを定義する必要があります。多くの代替手段があり、既存のコードに適合することが重要です。そのため、nodeunit は現在、これをすぐに提供していません。

これを実現するには、Browserify を確認する必要があると思います。

ブラウザ化

Node.js スタイルの require() を、まるで魔法のようにサーバー側のビルド ステップでブラウザーで動作させます。

モカ

Mocha は、Node.js およびブラウザー用のシンプルで柔軟で楽しい JavaScript テスト フレームワークです。

TJ (Express.js の作成者) によって作成された Mocha を参照する必要があると思います。Mocha を使用すると、コード カバレッジ、ウォッチ モード、通知を簡単に実行できます。大きなプラスとして、Mocha はより維持されます。

于 2012-06-25T15:05:21.243 に答える
2

Karma ランナーには、ブラウザーと PhantomJS で nodeunit テストを実行するためのnodeunit アダプターがあります。これは、 Browserifyを使用してCommonJS モジュール(エクスポート)で記述されたテストを実行するテスト エントリポイントGruntfileの例です。

于 2013-04-06T05:18:32.507 に答える
0

nodeunit 自体の中で分離された jQuery ロジックを実際にテストできます。たとえば、datepicker ライブラリ用に作成したいくつかのテストを次に示します。

/* jshint evil:true */
/* global module, require, DatePair */

var fs = require('fs');
// Some of the plugins use a jQuery variable instead of $
var jQuery = require('jquery');
var $ = jQuery;

// Recreate window and document
var window = { jQuery: jQuery };
var document = window;

// The file is included here:
eval(fs.readFileSync('../lib/js/jquery/plugins/jquery.cookie.js') + '');
eval(fs.readFileSync('../lib/js/jquery.timepicker/jquery.timepicker.js') + '');
eval(fs.readFileSync('../lib/js/bootstrap/bootstrap-datepicker.js') + '');
eval(fs.readFileSync('../homepage/js/datepair.js') + '');

// Initialize DatePair Object
var datePair = DatePair(new Date(), {
    dateStart: $('<input type="text" autocomplete="off">'),
    dateEnd: $('<input type="text" autocomplete="off">'),
    timeStart: $('<input type="text" autocomplete="off">'),
    timeEnd: $('<input type="text" autocomplete="off">')
});

module.exports = {
    'Time Delta Var Is 1 hour' : function (test) {
        test.equal(datePair.getTimeDelta(), 3600);
        test.done();
    },
    'Change Date And Check For 1 Hour Difference' : function (test) {
        datePair.startTime.val("10:00pm").change();
        test.equal(datePair.endTime.val(), "11:00pm");
        test.done();
    },
    'Make End Date Move Up One Day' : function (test) {
        var expectedEndDates = [1];
        datePair.startTime.val("11:00pm").change();
        expectedEndDates.push(parseInt(datePair.startDate.val().split("/")[1], 10) + 1);

        test.ok($.inArray(parseInt(datePair.endDate.val().split("/")[1], 10), expectedEndDates) !== -1);
        test.equal(datePair.endTime.val(), "12:00am");
        test.done();
    },
    'Change To 11:30pm Of Previous Day' : function (test) {
        // Move startTime 1 Day Forward
        datePair.startTime.val("11:00pm").change();
        // Move EndDate 1 Day Backwards
        datePair.endTime.val("11:30pm").change();

        test.equal(datePair.endDate.val(), datePair.startDate.val());
        test.done();
    }
}

ここで完全なコードとライブラリを参照してください: https://github.com/keithhackbarth/jquery-datetime-picker

于 2014-08-29T18:57:32.307 に答える