gpt4 book ai didi

Javascript Jasmine 测试 : Prevent tested function to call function from object that was created within tested function

转载 作者:行者123 更新时间:2023-11-28 20:41:42 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

用 jasmine 没有“好的”方法来解决这个问题。我认为,将 BaseView viewObj 作为参数是一种更好的编码风格。它将减少方法的依赖性。所以它不需要知道特定的 BaseView 类,他只需要一个具有 generate 方法的 viewObj

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

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

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

然后你会这样调用它:

showEditUser(..., viewMock);

编辑:Here is a similar question

关于Javascript Jasmine 测试 : Prevent tested function to call function from object that was created within tested function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com