2

我想用 Jasmine 测试一个 Javascript 函数,它的结构如下:

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

editUserView.generate()导致错误。没关系,因为我不想测试它。但是我怎样才能防止它被调用呢?

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

4

1 回答 1

1

茉莉花没有“好”的方法来解决这个问题。我认为,将 BaseViewviewObj作为参数是一种更好的编码风格。它将减少方法的依赖性。所以它不必知道具体的BaseView-class,他只需要一个viewObj具有generate-method 的方法。

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

然后您可以创建一个 ViewMock 并将其放入该函数中,如下所示:

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

然后你会这样称呼它:

showEditUser(..., viewMock);

编辑:这是一个类似的问题

于 2015-04-29T14:17:36.220 回答