0

ko.computed他の 2 つの複雑な計算に依存するフィールドのテストを作成しようとしています (ここではデモンストレーションのために削除されています)。

function PositionsViewModel(options) {
  var self = this;
  self.computed1 = ko.computed(function() { return 1; });
  self.computed2 = ko.computed(function() { return 2; });
  self.computedIWantToTest = ko.computed(function() { 
    return self.computed1() + self.computed2();
  });
}

私のジャスミン テストでは、次のように beforeEach で VM のインスタンスを作成します。

this.subject = new PositionsViewModel();

computed1スタブを作成して、単独でcomputed2テストできるようにしたいと考えています。computedIWantToTestこれまでのところ、私の試みは失敗しています。

vm インスタンスで直接スタブしてみました。しかし、メソッドが上書きされても、計算された関数は何らかの方法でキャッシュされているようです。

4

1 に答える 1

0

1 つの方法は、最初の 2 つの計算関数を注入することです。

http://jsfiddle.net/kevincollins/RwKAD/

var PositionsViewModel = function (computedService1, computedService2, options) {

  this.defaultComputed1 = ko.computed(function() { return 1; });
  this.defaultComputed2 = ko.computed(function() { return 2; });

  this.computed1 = computedService1 || this.defaultComputed1;
  this.computed2 = computedService2 || this.defaultComputed2;

  var self = this;
  this.computedIWantToTest = ko.computed(function() { 
    return self.computed1() + self.computed2();
  });

};

var vm1 = new PositionsViewModel();
ko.applyBindings(vm1, document.getElementById("o1"));

var ComputedServiceMock1 = ko.computed(function() { return 100; });
var ComputedServiceMock2 = ko.computed(function() { return 200; });       

var vm2 = new PositionsViewModel(ComputedServiceMock1, ComputedServiceMock2);
ko.applyBindings(vm2, document.getElementById("o2"));
于 2013-03-28T02:10:49.127 に答える