4

私はEmberを使い始めたばかりで、ジャスミンテストを書いているときにこの問題に遭遇しました。

私が次のコードを持っているとすると

App.RecipeController = Ember.Controller.extend
  selectedGrain: null
  amount: null
  recipeGrains: Ember.A()

  totalWeight: (->
    weight = 0
    @get('recipeGrains').forEach (grain) ->
      weight += grain.get('weight')
    weight
  ).property('recipeGrains.@each')

  addGrain: ->
    grain = Ember.Object.create
      name: @get('selectedGrain').get('name')
      weight: parseFloat(@get('amount'))
    @get('recipeGrains').pushObject(grain)
    @set('selectedGrain', null)
    @set('amount', null)

そして、私は次のテストを書きます。

describe("Controllers", function() {
  describe("NewRecipeController", function() {
    var controller;

    beforeEach(function() {
      controller = Brewery.NewRecipeController.create();
    });

    it("calculates the correct total weight", function() {
      var grains = controller.get('recipeGrains');
      grains.pushObject(Ember.Object.create({weight: 4.0}));
      grains.pushObject(Ember.Object.create({weight: 3.2}));
      expect(controller.get('totalWeight')).toEqual(7.2);
    });

    it ("adds grains based on its selected grain", function() {
      controller.set('selectedGrain', Ember.Object.create({name: "Wheat"}));
      controller.set('amount', '10.2');
      controller.addGrain();
      expect(controller.get('totalWeight')).toEqual(10.2);
    });
  });
});

両方のテストに合格すると予想しましたが、代わりに2番目のテストがメッセージで失敗します

17.4は10.2に等しいと予想されます。

最初のテストの状態が2番目のテストに波及しているようです。私よりも知識のある人が、Emberがコントローラーの状態を処理する方法と、これが発生する理由を説明できますか?

ありがとうございました!

4

1 に答える 1

5

テストが失敗する理由は、デフォルト値の初期化@4行目です。

initメソッドで初期値を設定するかApp.RecipeController、インスタンスの作成時に値を渡す必要があります。

App.RecipeController = Ember.Controller.extend
  init: ->
    @set 'recipeGrains', Ember.A()

また

controller = Brewery.NewRecipeController.create({ recipeGrains: Ember.A() });

この記事のセクション6をご覧ください。

于 2012-10-25T15:01:47.610 に答える