web-dev-qa-db-ja.com

jasmineでbackbone.jsアプリをテストするためのベストプラクティス?

私は最近、ジャスミンを使用してJavaScriptの単体テストを開始しました。今までそれを愛する。

私が取り組んでいるプロジェクトの1つは、backbone.jsのプラグインです。バックボーンはJavaScriptのMVCスタイルのフレームワークであるため、バックボーンは多くの場合、ビューの操作(通常はjqueryによる)を行います。私のプラグインもこれに例外ではありません。バックボーンビューを介して、html要素で操作されているものがいくつかあります。

今、私はジャスミンでこれを価値あるものにするために何かひどいことになるかもしれないことをしています。ここに私が私のテストをレイアウトする方法の例があります:

describe("conventionBindings", function(){
  beforeEach(function(){
    this.model = new AModel({name: "Some Name"});
    this.view = new AView({model: this.model});
    this.view.render();
  });

  afterEach(function(){
    this.view.close();
  });

  describe("... that thing it does ... ", function(){
    it("... stuff .... ", function(){
    });
  });
});

ここで重要なのは、beforeEachとafterEachです。ビューのrenderメソッドを呼び出してから、ビューのcloseメソッドを呼び出していることに注意してください。

これらのメソッドの機能は次のとおりです。

AView = Backbone.View.extend({
  render: function(){
    this.html = $("");
    $("body").append(this.html);
  },

  close: function(){
    this.html.remove();
  }
});

テストのビューにこの「閉じる」メソッドを具体的に追加しています。そうしないと、ジャスミンテストサーバーを実行したときに表示しているジャスミンページに、追加した入力が表示されますページの本文。

だから...これが私の質問です:

これは恐ろしいことですか?ページの本文に要素を追加する以外の方法でビューとHTML要素の操作をテストする必要がありますか?

現時点では、これらのテストをCIサーバーで実行する必要はありませんが、実行するとどのような問題が発生しますか?プラグインがテスト中にhtml要素を操作する必要があることを知って、CIサーバーでバックボーンプラグインをテストできるように、より良いジャスミンテストを作成するにはどうすればよいですか?

5
Derick Bailey

この記事は、ジャスミンのテストを始めるための優れたリソースであることがわかりました。

ジャスミンとシノンを使用したバックボーンアプリケーションのテスト

彼の記事では、setFixturesを使用してページに要素を具体的に追加しています。同様の方法で、これまで私が使用してきた方法です。ベストプラクティスに関する限り、この方法について他の人がどのように感じているかを確認する必要があります。ページに配置せずにレンダリングを実行する別の方法は考えられません。

2
Nathan Palmer