提问人:blekione 提问时间:4/6/2018 更新时间:4/7/2018 访问量:1275
使用 jasmine 进行单元测试函数时模拟全局对象
Mocking a global object when unit testing function with jasmine
问:
我需要为从 .它有一个全局对象,该对象在一个函数中初始化,然后从另一个函数访问。我的意思是看起来像:node.js
script.js
var object;
function first() {
object = Initialise.object();
...
}
function second() {
object.doSomething();
...
}
我需要为函数编写一个单元测试。我们正在使用一个茉莉花测试框架,我正在努力为 .这是因为我不知道如何从 .我试过了second()
object
script-spec.js
var script = require("../src/script.js");
var testObject = script.object;
但是是.testObject
undefined
我的知识有限,这对我也没有帮助(我有背景)。JavaScript
Java
如何测试功能?我知道我可能需要重构/重新设计,我可以接受。second()
script.js
答:
1赞
generalhenry
4/6/2018
#1
如果它是一个全局变量会更容易,你可以做一个.它实际上是一个模块级变量,模块实际上只是函数。重新分配的唯一方法是从script.js中定义的函数中,例如global.object = mockObject
object
function injectMockObject (mockObject) {
object = mockObject;
}
您需要将其添加到script.js
2赞
Bryan Downing
4/6/2018
#2
我会重写代码以使其功能更强大:
function first() {
return Initialise.object();
}
function second(object) {
object.doSomething();
...
}
然后稍后使用代码时:
var object = first()
second(object)
然后模拟变得非常微不足道,因为你可以控制在测试中作为参数传递的内容。second
有关此内容的详细信息,请查看 Clean Code Javascript 存储库中的避免副作用。
评论