javascript - 节流计算属性的 Jasmine 规范

标签 javascript knockout.js jasmine

我正在尝试为计算的可观察量编写 Jasmine 规范,如下所示:

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 });

使用 throttle ,positionDate 计算函数不会更新。我尝试过人为等待以及调用 valueHasMutated() 均无济于事。

有人成功地编写了有关节流计算的规范吗?

最佳答案

由于使用了throttle,您使可观察的“异步”,因此您需要使用 asynchronous specs features在《 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 .

关于javascript - 节流计算属性的 Jasmine 规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14446024/

相关文章:

javascript - 这些不同样式的 "pop up"框的正确术语是什么以及如何实现它们?

javascript - 在 Select2 中选择选项 - 禁用/启用操作未触发

javascript - 使用 tcomb,我是否遗漏了某些内容或者无法定义实例函数?

javascript - 添加 Font Awesome Icon + Text 给我错误

html - 如何在 HTML 中注释掉 knockout 代码

javascript - 将 Jasmine 与 Angular JS 输入验证结合使用

javascript - knockout 中的 foreach 绑定(bind)

javascript - knockout.js 可以绑定(bind)到 CSS 类吗?

javascript - Jasmine 期望逻辑(期望 A OR B)

angular - Jasmine 测试失败但 'expected' 和 'toBe' 字符串似乎相等?