如何在Jasmine spyOn方法调用中设置适当的作用域?

问题描述:

我目前正在尝试测试我是否能够在我创建的类中调用某些方法。经过反复试验,我能得到它与类连接正确,但现在我得到这个错误:如何在Jasmine spyOn方法调用中设置适当的作用域?

“错误:无法找到一个对象时,以间谍活动的sayHello()”

后研究我相信这是一个范围问题。我曾尝试在spyOn调用中删除删除bookTitles,向fakeTitle(及其相应部分)添加原型,以及在我的主JS文件中的类中使用方法声明。这些尝试似乎都没有奏效(事实上,它实际上一半时间打破了链接)。为什么spyOn方法无法识别sayHello()?

这里是我的代码:

class bookTitle { 
    helloSomeone(toGreet) { 
     return this.sayHello() + ' ' + toGreet; 
    } 

    sayHello() { 
     return 'Hello'; 
    } 
} 

module.exports = { 
    bookTitle 
} 

和我的茉莉文件:

var bookTitles = require ('./bookTitles.js'); 

describe('bookTitle', function() { 
    it('calls the sayHello() function', function() { 
     var fakeTitle = new bookTitles.bookTitle(); 
     spyOn(bookTitles.fakeTitle, 'sayHello'); 
     bookTitles.fakeTitle.helloSomeone('world'); 
     expect(bookTitles.fakeTitle.sayHello).toHaveBeenCalled(); 
    }); 
}); 

另外一个侧面的问题,如果我说的fakeTitle对象是BOOKTITLE类的一部分,那么为什么我需要在spyOn方法和下面声明bookTitles?我的思考过程是,通过在所需文件的类中说出它的一个新对象,那么在此之后不应该有任何方法调用自动假定这是调用应该去的地方?

你要窥探你创建的对象上:

describe('bookTitle', function() { 
    it('calls the sayHello() function', function() { 
     var fakeTitle = new bookTitles.bookTitle(); 
     spyOn(fakeTitle, 'sayHello'); 
     fakeTitle.helloSomeone('world'); 
     expect(fakeTitle.sayHello).toHaveBeenCalled(); 
    }); 
}) 
+0

我明白了,我是在概念上的误解spyOn如何运作。这个答案也同时回答我的问题,谢谢你的帮助! – mcrav95