Javascript 使用Modernizer的单元测试代码
我的问题是关于使用Mocha对javascript代码进行单元测试。归根结底,这可能是一个关于依赖注入或控制反转的问题,我对这些概念掌握得很差 我正在尝试编写一个测试,它只创建header.js的一个实例,并测试它是否是一个对象。然而,每当我这样做的时候,当它加载Modernizer时,我的测试就会崩溃,并显示以下错误消息。这似乎是因为Modernizer依赖于在浏览器内部运行,但我的单元测试需要在命令行上运行Javascript 使用Modernizer的单元测试代码,javascript,unit-testing,requirejs,modernizr,mocha.js,Javascript,Unit Testing,Requirejs,Modernizr,Mocha.js,我的问题是关于使用Mocha对javascript代码进行单元测试。归根结底,这可能是一个关于依赖注入或控制反转的问题,我对这些概念掌握得很差 我正在尝试编写一个测试,它只创建header.js的一个实例,并测试它是否是一个对象。然而,每当我这样做的时候,当它加载Modernizer时,我的测试就会崩溃,并显示以下错误消息。这似乎是因为Modernizer依赖于在浏览器内部运行,但我的单元测试需要在命令行上运行 /lib/modernizr.js:8 l.风格的“MozAppearance”,
/lib/modernizr.js:8
l.风格的“MozAppearance”,s=r&!!b、 createRange().compareNode,t=s?l:n.parentNode
^
TypeError:无法读取未定义的属性“parentNode”
at/Users/devadmin/devenv/djscript/djscript vendor/lib/modernizer.js:8:6291
我有一些requirejs模块,它们位于以下层次结构中:
lib
└── pj
├── module
│ └── header
│ └── header.js
├── util
│ └── header
│ └── Util.js
└── widget
└── header
├── Header.js
└── view
├── HeaderView.js
└── NavView.js
header.js实例化header.js,然后创建HeaderView和NavView。只有HeaderView需要现代化
关于如何让代码进入可测试状态,有什么提示吗?看看我是如何打包Modernizr以便与requirejs一起使用的,会有帮助吗?好吧,我没有专门使用过Mocha,但您应该能够通过执行以下操作在测试/管理中创建一个假的Modernizr实例
define(<module path/name - e.g. 'libs/modernizr'>, function(){
return {
history: false,
foo: true,
bar: false
};
});
define(,function(){
返回{
历史:错,
傅:是的,
酒吧:错
};
});
…在您尝试加载正在测试的模块之前。定义了该伪实例后,您的被测模块应该使用伪实例,而不是实际的Modernizer库
你基本上是在劫持AMD的“命名模块”(link:)功能,用你的赝品替代真正的Modernizer。通过这种方式,您可以显式地测试您需要的任何状态
希望有帮助 看起来很有帮助,我的考试一团糟,可能会把这个问题全部拉下来。