首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Jasmine监视构造函数

使用Jasmine监视构造函数
EN

Stack Overflow用户
提问于 2012-02-19 15:54:08
回答 6查看 72.5K关注 0票数 71

我使用Jasmine来测试是否创建了某些对象并调用了这些对象上的方法。

我有一个jQuery小部件,它创建flipcounter对象并调用它们的setValue方法。flipcounter的代码如下:https://bitbucket.org/cnanney/apple-style-flip-counter/src/13fd00129a41/js/flipcounter.js

使用以下命令创建翻转计数器:

代码语言:javascript
复制
var myFlipCounter = new flipCounter("counter", {inc: 23, pace: 500});

我想测试一下是否创建了翻转计数器,并在它们上调用了setValue方法。我的问题是,我如何在这些对象被创建之前就监视它们呢?我是否窥探构造函数并返回假对象?示例代码会很有帮助。感谢您的帮助!:)

更新:

我试过像这样监视flipCounter:

代码语言:javascript
复制
myStub = jasmine.createSpy('myStub');
spyOn(window, 'flipCounter').andReturn(myStub);

//expectation
expect(window.flipCounter).toHaveBeenCalled();

然后通过flipCounter测试setValue调用:

代码语言:javascript
复制
spyOn(myStub, 'setValue');

//expectation
expect(myStub.setValue).toHaveBeenCalled();

初始化flipCounter的第一个测试很好,但是测试setValue调用时,我得到的只是一个“setValue() method is not exist”错误。我这样做是对的吗?谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-02-19 17:26:39

flipCounter只是另一个函数,即使它碰巧也构造了一个对象。因此,您可以这样做:

代码语言:javascript
复制
var cSpy = spyOn(window, 'flipCounter');

找一个间谍来监视它,对它进行各种检查,或者说:

代码语言:javascript
复制
var cSpy = spyOn(window, 'flipCounter').andCallThrough();
var counter = flipCounter('foo', options);
expect(cSpy).wasCalled();

然而,这似乎有点过头了。这样做就足够了:

代码语言:javascript
复制
var myFlipCounter = new flipCounter("counter", options);
expect(myFlipCounter).toBeDefined();
expect(myFlipCounter.getValue(foo)).toEqual(bar);
票数 50
EN

Stack Overflow用户

发布于 2016-06-10 04:26:36

我建议您在模拟具有需要监视的属性的对象时使用jasmine.createSpyObj()

代码语言:javascript
复制
myStub = jasmine.createSpyObj('myStub', ['setValue']);
spyOn(window, 'flipCounter').andReturn(myStub);

这将测试与预期的flipCounter接口的交互,而不依赖于flipCounter实现。

票数 14
EN

Stack Overflow用户

发布于 2014-06-05 23:33:29

下面的代码不依赖于“window”。假设这是你想要测试的代码-

代码语言:javascript
复制
function startCountingFlips(flipCounter) {
    var myFlipCounter = new flipCounter("counter", {inc: 23, pace: 500});
}

你的测试结果可能是-

代码语言:javascript
复制
var initSpy = jasmine.createSpy('initFlipCounter');
var flipCounter = function(id, options) {
    initSpy(id, options);
}
startCountingFlips(flipCounter);
expect(initSpy).toHaveBeenCalledWith("counter", {inc:23, pace:500});
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9347631

复制
相关文章

相似问题

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