我目前正在尝试测试我是否能够在我构建的类中调用某些方法。通过反复试验,我能够正确地与班级联系,但现在我收到了这个错误:
"错误::找不到一个对象来监视sayHello()"
经过研究,我认为这是一个范围问题。我已经尝试删除在spyOn调用中删除bookTitles,将原型添加到fakeTitle(及其相应的部分),以及在我的主JS文件中弄乱类中的方法声明。这些尝试似乎都没有起作用(实际上它实际上是在一半时间内打破了链接)。为什么spyOn方法无法识别sayHello()?
这是我的代码:
class bookTitle {
helloSomeone(toGreet) {
return this.sayHello() + ' ' + toGreet;
}
sayHello() {
return 'Hello';
}
}
module.exports = {
bookTitle
}
和我的Jasmine文件:
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?我的思维过程是,通过在所需文件的类中说出一个新对象,然后不应该在任何方法调用之后自动假设该调用应该去哪里?
答案 0 :(得分:1)
你必须监视你创建的对象:
describe('bookTitle', function() {
it('calls the sayHello() function', function() {
var fakeTitle = new bookTitles.bookTitle();
spyOn(fakeTitle, 'sayHello');
fakeTitle.helloSomeone('world');
expect(fakeTitle.sayHello).toHaveBeenCalled();
});
})