【发布时间】:2012-12-13 16:55:03
【问题描述】:
我开始为我的 js 代码编写单元测试,我是这方面的新手。我们使用了 knockout.js,需要为项目测试我们的视图模型。
示例如下:
Tasks.js 文件
var yc = yc || {};
yc.TasksVM = function (options) {
_addTask = function () {
yc.AddTask.openDialog();
},
_paging = myc.PagingVM();
_instance = {
addTask: _addTask,
paging: _paging,
};
return _instance;
}
和 AddTask.js 文件
var yc = yc || {};
yc.AddTaskVM = function (options) {
var
_openDialog = function (orderId) {
$.ajax({
data: data, type: 'get', url: dialogUrl,
success: function (dialogContent) {
// ...
}
});
};
_instance = {
openDialog: _openDialog
};
return _instance;
}
当我尝试使用 Jasmine 测试 TasksVM 时,我遇到了需要实例化 yc.AddTask.openDialog() 调用openDialog() 的问题。我还需要将此文件包含在<script> 标记中才能接听电话。然后,在yc.AddTask.openDialog 中,我需要模拟$.ajax 调用(并在我的html 中包含jQuery)。
我的问题是关于耦合的。
1.可以从yc.TasksVM内部调用yc.AddTask.<my_function>吗?
从 .NET 世界,我们通过 接口 处理这个问题。我们移除所有外部依赖并仅在源代码中使用接口。所以我们可以在我们正在测试的代码中模拟任何东西。
2. 是否需要将所有这些依赖文件包含到我的 html 文件运行器中?
【问题讨论】:
标签: javascript unit-testing knockout.js jasmine dependency-management