9

多くのハッキングの後、ノードを介して簡単な Jasmine テストを実行することができました。

ただし、理解できない奇妙なことがあります...ジャスミンファイルは、機能するために自分自身への参照を戻す必要があるように見える関数をエクスポートします(これは、ジャスミンとConsoleReporterの両方に当てはまります)。

私はこれがこれを行う正しい方法ではないと確信しています(ただし、最終的にいくつかのテストを実行できたことを嬉しく思います:))ので、誰かがこれを行うためのより良い方法を説明できますか?

(注: node-jasmine のように、理解できないサード パーティのコードを追加することには興味がありません。現在持っているものを理解したいので、これ以上追加しないでください!)

// Include stuff
jasmine = require('../../../Apps/Jasmine/jasmine-standalone-2.0.0/lib/jasmine-2.0.0/jasmine.js');
jasmineConsole = require('../../../Apps/Jasmine/jasmine-standalone-2.0.0/lib/jasmine-2.0.0/console.js')


// WHAT THE? I DON'T EVEN KNOW WHAT THIS MEANS
jasmine = jasmine.core(jasmine);
jasmineConsole.console(jasmineConsole, jasmine)


// Set up the console logger
jasmine.getEnv().addReporter(new jasmine.ConsoleReporter({ print: console.log }));


// Create some global functions to avoid putting jasmine.getEnv() everywhere
describe = jasmine.getEnv().describe;
it = jasmine.getEnv().it;
expect = jasmine.getEnv().expect;


// Dummy tests

describe("A suite", function() {
    it("contains spec with an expectation", function() {
        expect(true).toBe(true);
    });
    it("contains spec with a failing expectation", function() {
        expect(true).toBe(false);
    });
});


// Kick off execution

jasmine.getEnv().execute();

ジャスミン

編集:出荷されたbootstrap.jsでこれに気づきました。これは基本的に同じです(名前が異なることを除いて)...おそらくこれは正常ですか?!

おかしなことをしているのは私だけではありません!

4

2 に答える 2

6

Pivatol は最近、2.0 でより優れた node.js サポートを Jasmine に追加し、公式の NPM パッケージをリリースする予定です。今のところ、独自のノード テスト スイートで使用されている実装に従って、ノードから使用できます。

あなたが書いたコードの裏で何が起こっているかについての簡単な説明は次のとおりです。

jasmine = jasmine.core(jasmine); 最初に require('jasmine') すると、単一の関数 getJasmineRequiredObj(); が返されます。jasmine.core(jasmine) を呼び出すことによりexports、window.jasmineRequire オブジェクトにノード ステートメントを追加する代わりに、node ステートメントを使用して動作メソッドを返すように jasmine に指示します。

https://github.com/pivotal/jasmine/blob/master/src/core/requireCore.js

function getJasmineRequireObj() {
  if (typeof module !== 'undefined' && module.exports) {
    return exports;  
  } else {
    window.jasmineRequire = window.jasmineRequire || {};
    return window.jasmineRequire;
  }
}

// jRequire is window.jasmineRequire in a browser or exports in node.
getJasmineRequireObj().core = function(jRequire) {
  var j$ = {};

  jRequire.base(j$);
  j$.util = jRequire.util();
  j$.Any = jRequire.Any();
  ...
  return j$; // here is our jasmine object with all the functions we want.
};

jasmineConsole.console(jasmineConsole, jasmine)Jasmine は、コア機能をレポーターとは別に初期化します。このステートメントは、コンソール レポーターに関してのみ、本質的に jasmine.core(jasmine) と同じものです。

https://github.com/pivotal/jasmine/blob/master/src/console/requireConsole.js

于 2014-03-02T13:53:46.180 に答える