Javascript Jasmine测试:防止测试函数从测试函数中创建的对象调用函数

时间:2015-04-29 11:33:53

标签: javascript testing requirejs jasmine spy

我想测试一个具有如下结构的Jasmine的Javascript函数:

showEditUser: function (...) {
    // more code here...
    var editUserView = new EditUserView();
    // more code here...
    editUserView.generate(...);
}

editUserView.generate()会导致错误。这没关系,因为我不想测试它。但是如何防止它被调用呢?

EditUserView是一个RequireJS模块,它扩展了另一个名为BaseView的模块。函数generate()BaseView中定义。还有其他扩展BaseView的模块,我希望它们在测试时不要调用generate。我怎么能用Jasmine做到这一点? spyOn(...).and.callFake()似乎无法实现,因为在调用函数时我没有editUserView对象。有没有一种静态方法可以告诉Jasmine callFake() generate中的函数BaseView

1 个答案:

答案 0 :(得分:1)

没有"很好"用茉莉花解决这个问题的方法。我认为,将BaseView viewObj作为参数是一种更好的编码风格。它将减少方法的依赖性。因此,不必了解具体的BaseView课程,他只需要一个viewObj方法的generate

showEditUser: function(..., viewObj) {
    // ...
    viewObj.generate(...);
}

然后你可以创建一个ViewMock并将它放入这个函数中:

var viewMock = {};
viewMock.generate = jasmine.createSpy('generate() spy');

然后你会这样称呼它:

showEditUser(..., viewMock);

编辑:Here is a similar question