【问题标题】:Knockout computed doesn't seem to be updating淘汰赛计算似乎没有更新
【发布时间】:2013-11-18 13:47:25
【问题描述】:

我有一个简单的视图模型,我正在对其进行单元测试,但我似乎无法理解这种行为。我认为这可能与淘汰赛有选择地跟踪依赖项或缓存计算结果有关。

代码(represented in this fiddle):

function viewModel() {
 var serviceErrors = ko.observable([]),
     isCancelImmediately = ko.observable(true),
     futureDate = ko.observable(),
     errors = ko.computed(function() {
         var allErrors = serviceErrors(),
             isImmediate = isCancelImmediately(),
             selectedDate = futureDate();

         if(!selectedDate && !isImmediate) {
          allErrors.push('Please select a date if not immediate.');   
         }

         return allErrors;
     });

    return {
        futureDate: futureDate,
        errors: errors,
        isCancelImmediately: isCancelImmediately
    };
}
test('should give error if user has not selected a date when closing immediately', function() { 
    var sut = viewModel();

    ok(!sut.futureDate(), 'no date should be set to start with');    
    sut.isCancelImmediately(false);
    equal(sut.errors().length, 1, 'should contain a future date error if user hasn\'t entered a date');
    sut.futureDate('11/12/2014');
    equal(sut.futureDate(), '11/12/2014', 'should have set future date');
    equal(sut.errors().length, 0, 'should not be showing error');
});

谁能告诉我为什么最后一个断言失败了?

【问题讨论】:

    标签: javascript unit-testing knockout.js qunit


    【解决方案1】:

    我认为:

    allErrors.push('Please select a date if not immediate.'); 
    

    实际上是将一个字符串推送到您的 serviceErrors observable 包含的数组中。因此,当您在 addErrors 上运行 push 时,您也会推送到 serviceErrors。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 2017-05-11
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多