首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Jasmine和Knockout模拟计算字段

使用Jasmine和Knockout模拟计算字段
EN

Stack Overflow用户
提问于 2013-03-28 01:04:01
回答 1查看 1.7K关注 0票数 0

我正在尝试为一个依赖于另外两个复杂计算的ko.computed字段编写一个测试(为了演示,这里将其删除)。

代码语言:javascript
复制
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();
  });
}

在我的jasmine测试中,我在beforeEach中创建了一个VM实例,如下所示:

代码语言:javascript
复制
this.subject = new PositionsViewModel();

我希望能够存根computed1computed2,这样我就可以单独测试computedIWantToTest。到目前为止,我这样做的尝试都失败了。

我已经尝试了直接在vm实例上进行存根。但是,看起来,即使方法被覆盖,计算缓存也会以某种方式缓存函数。

EN

回答 1

Stack Overflow用户

发布于 2013-03-28 10:10:49

一种方法是注入前两个计算函数。

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

代码语言:javascript
复制
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"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15664927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档