2

Rails 3.2/Backbone アプリでハンドルバー テンプレートをレンダリングするためにsht_rails gem を使用しています。

この .handlebars テンプレートをアプリのバックボーン部分とレール部分の両方で使用したいと考えていますが、今のところバックボーンで動作しています。

私はそれを次のように使用しています:

class MyApp.views.MyView extends MyApp.views.BaseView

  template: SHT['templates/feed_item']

  render: ->
    data = {}
    @$el.html @template(data)
    @

これはアプリでうまく機能し、まったく問題ありません。ハンドルバーのテンプレートは見栄えがします。

ただし、これは私の js テストには適していません (Jasmine-headless-webkit で Jasmine を使用しています)。

これが起こることです:

$ jasmine-headless-webkit
ReferenceError: Can't find variable: SHT

sht_rails gem が SHT 変数を登録しているように見えるので、これは完全に理にかなっていますが、私がテストしたときはそうではないようです。

jhw の実行時に SHT 変数を登録する良い方法はありますか? またはジャスミン自体?テンプレートが呼び出されることを知っているだけで、テスト用にレンダリングするテンプレートは必要ありません。しかし今のところ、この SHT を登録する方法を理解するまで、私のジャスミン テストはすべて壊れています。

ありがとう!

4

1 に答える 1

1

私たちは、 Rails 3.2/Backbone/Marionette アプリで、tilt-jade gem を介してjade テンプレートを使用しているときに同じ問題に直面しました(したがって、以下のコード サンプルの変数)。私たちの解決策は、テンプレートの抽象化を作成し、Jasmine スパイを使用して仕様の実行中に応答を偽造することでした。このアプローチにより、テンプレートの使用、構築などをテストすることもできます。JST

スパイ全般

ジャスミンスパイに慣れていない場合:

Jasmine は、多くのスパイ行為、あざけり行為、偽装行為を可能にする「スパイ」を統合しています。「スパイ」は、スパイしている機能を置き換えます。

抽象化

抽象化を作成します。

YourApp.tpl = function(key, data) {
  var path = "templates";
  path += key.charAt(0) === "/" ? key : "/" + key;

  var templateFn = JST[path];
  if(!templateFn) {
    throw new Error('Template "' + path + '" not found');
  }
  if(typeof templateFn !== "function") {
    throw new Error('Template "' + path + '" was a ' + typeof(templateFn) + '. Type "function" expected');
  }
  return templateFn(data);
};

そして必要なモンキーパッチ:

// MONKEYPATCH - Overriding Renderer to use YourApp template function
Marionette.Renderer = {
  render: function(template, model){
    return YourApp.tpl(template, model);
  }
};

テンプレート抽象化スパイ (spec_helper.js)

これで、次のようにスパイできます。

spyOn(YourApp, 'tpl').andCallFake(function(key, data) {
  return function() {
    return key;
  };
});

ボーナス

関数をスパイしているのでYourApp.tpl、それに対してテストすることもできます。

expect(YourApp.tpl).toHaveBeenCalledWith("your_template", { model: model, property: value });

補遺

jasmine-headless-webkit --runner-out フラグについてまだ知らず、荒野で Jasmine 仕様をデバッグしている場合は、この投稿をチェックして、失敗の完全なバックトレースを含むランナー出力レポートを生成する方法を確認してください。 .

于 2013-05-05T22:46:43.760 に答える