1

本質的にJavaScriptライブラリになるものを構築するためにCoffeeScriptを使用したいと思います。

できるようになりたいだけです

  1. 継承を使用して、いくつかのクラスを定義します
  2. コードをいくつかのファイルに保存する
  3. いくつかのユニットテストを書く(QUnitまたは機能するものなら何でも、できればCoffeeScriptでテストを書く)
  4. (理想的には)私が作業している間、プロジェクトを自動的に監視して構築します

これは理にかなっているようですよね?私の計画では、コンパイルされたJavaScriptに対して、ブラウザーで単体テストを実行するだけですが、node.jsで直接実行できれば、さらに優れています。

現在、 CoffeeToasterQUnitを使用して、2つの異なるCoffeeToaster構成を使用してこれを実行しようとしています。1つはテストあり、もう1つはテストなしです。それは機能していますが、おそらく誰かがより良い提案をしていますか?CoffeeToasterを捨てて、Cakeでやるべきですか?または、別の単体テストフレームワークを入手しますか?誰かが私にこれのチュートリアルを教えてもらえますか?クライアントサイドのJSlibを作成しているので、Railsなどを使用したくありません。

4

1 に答える 1

4

私は現在使用しています:

  • テスト ランナーとしてのMochaと、アサーション用のshould.js
  • require必要なライブラリのモック/スタブを使用して、分離されたテストの特定の呼び出しインターセプトするためのモック。
  • *コード カバレッジ レポートのコードを計測するためのJSCoverage 。

私のコードは にsrc/あり、CoffeeScript でテストを書きます。makeコードのビルドとテストに使用します。

  • make buildの CoffeeScriptsrc/を の JavaScript にコンパイルしますlib/
  • make testコードをビルドし、 でテストを実行しますtest/
  • make monitorテストが変更されるとすぐにテストを監視して実行します。残念ながら、コードは再コンパイルされません。Vim キーバインディングを使用して を呼び出しますmake。これにより、Mocha がテストを再実行するようになります。 編集:これが気になる場合は、実行できます.coffee --watch -o lib/ -c src/
  • make coverageは、コード カバレッジ レポートを生成し、それを に配置しlib-cov/report.htmlます。

Makefileの見た目は次のようになります。

COFFEE = ./node_modules/.bin/coffee --compile
MOCHA = NODE_ENV=test ./node_modules/.bin/mocha
MOCHA_OPTS = \
    --compilers coffee:coffee-script \
    --require should \
    --colors
REPORTER = spec

build:
    @$(COFFEE) --output lib/ src/

test: build
    @$(MOCHA) --reporter $(REPORTER) $(MOCHA_OPTS)

monitor:
    @$(MOCHA) --reporter min $(MOCHA_OPTS) \
    --watch --growl

coverage: instrument
    @MYLIB_COV=1 $(MOCHA) $(MOCHA_OPTS) \
    --reporter html-cov > lib-cov/report.html

instrument: build
    @rm -rf ./lib-cov
    @jscoverage ./lib ./lib-cov

.PHONY: build test monitor coverage instrument

おそらく、ほとんど変更せずに上記を使用できます。

でカバレッジ レポートを生成するには、 のコードではなくmake coverage、 のインストルメント化されたコードに対してテストを実行する必要があります。これを可能にするためには、次の 3 つのことが必要です。lib-cov/lib/

  1. Makefileような環境変数を設定する必要がありますMYLIB_COV (名前は好きなように変更してください)。

  2. index.jsこの環境変数を見て、それに応じて次のrequireいずれかlib/を行う必要があります。lib-cov/

    // index.js
    module.exports = process.env.MYLIB_COV
      ? require('./lib-cov/mylib')
      : require('./lib/mylib');
    

    複数のソース ファイルからのエクスポートが必要な場合は、ここで結合できます。package.json に「main」以外のものがある場合はindex.js、忘れずに変更してください。

  3. テストは次のようにする必要がありrequire '../'ます。

    # test/test.user.coffee
    describe 'User', ->
      User = {}
    
      before ->
        {User} = require '../'
    
      describe '#equals()', ->
        describe 'when users have the same username and host', ->
          it 'should return true', ->
            user1 = new User 'user', 'some.host.foo'
            user2 = new User 'user', 'some.host.foo'
            user1.equals(user2).should.be.true
    
      # etc.
    

Mockery が必要かどうか、必要な場合はどのように使用するかは、読者の演習として残しておきます。requireただし、上記のテスト スニペットの呼び出しが内部beforeで行われているのには理由があることを指摘しておきます。

ハッピーコーディング!

于 2012-10-01T09:31:35.377 に答える