2

我正在尝试为计算的可观察对象编写茉莉花规范,如下所示:

self.positionDate = ko.computed(function () {
  var dateString = "";
  var start = moment(self.positionStartDate()).format("LL");
  var end = moment(self.positionEndDate()).format("LL");
  if (start !== end) {
    dateString = sprintf("%s - %s", start, end);
  }
  else {
    dateString = sprintf("%s", start);
  }
  return dateString;
}).extend({ throttle: 1 });

使用油门,positionDate 计算函数不会得到更新。我试过人工等待以及调用 valueHasMutated() 都无济于事。

有没有人成功编写过节流计算的规范?

4

1 回答 1

3

由于使用了throttle你的 observable “async”,所以你需要使用 Jasmine 中的异步规范特性

所以你需要使用runswaits函数,比如:

describe('throttled obserable', function () {

    it('positionDate should be changed after positionStartDate changed', 
      function () {
        var vm = new ViewModel();

        runs(function () {
            vm.positionStartDate('January 21 2013');
            vm.positionEndDate('January 22 2013');
        });

        waits(1);

        runs(function () {
            expect(vm.positionDate())
                 .toEqual('January 21 2013 - January 22 2013');
            vm.positionStartDate('January 20 2013');
        });

        waits(1);

        runs(function () {
            expect(vm.positionDate())
                 .toEqual('January 20 2013 - January 22 2013');
        });
    });
});

演示JSFiddle

于 2013-01-21T20:15:53.143 回答