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

时间:2017-09-03 20:54:33

标签: javascript jasmine

我目前正在尝试测试我是否能够在我构建的类中调用某些方法。通过反复试验,我能够正确地与班级联系,但现在我收到了这个错误:

"错误::找不到一个对象来监视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?我的思维过程是,通过在所需文件的类中说出一个新对象,然后不应该在任何方法调用之后自动假设该调用应该去哪里?

1 个答案:

答案 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();
    });
})