我想测试一个具有如下结构的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
?
答案 0 :(得分:1)
没有"很好"用茉莉花解决这个问题的方法。我认为,将BaseView viewObj
作为参数是一种更好的编码风格。它将减少方法的依赖性。因此,不必了解具体的BaseView
课程,他只需要一个viewObj
方法的generate
。
showEditUser: function(..., viewObj) {
// ...
viewObj.generate(...);
}
然后你可以创建一个ViewMock并将它放入这个函数中:
var viewMock = {};
viewMock.generate = jasmine.createSpy('generate() spy');
然后你会这样称呼它:
showEditUser(..., viewMock);