Javascript 使用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”,

我的问题是关于使用Mocha对javascript代码进行单元测试。归根结底,这可能是一个关于依赖注入或控制反转的问题,我对这些概念掌握得很差

我正在尝试编写一个测试,它只创建header.js的一个实例,并测试它是否是一个对象。然而,每当我这样做的时候,当它加载Modernizer时,我的测试就会崩溃,并显示以下错误消息。这似乎是因为Modernizer依赖于在浏览器内部运行,但我的单元测试需要在命令行上运行

/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。通过这种方式,您可以显式地测试您需要的任何状态


希望有帮助

看起来很有帮助,我的考试一团糟,可能会把这个问题全部拉下来。