假设我有一些需要jQuery的测试。好吧,我们不必相信,我实际上有测试。测试本身并不重要,但他们依赖于jQuery 的事实非常重要。
免责声明:这是node.js,因此无法依赖于解决方案中的全局变量。必须使用
require
将任何依赖项调用到文件中。
在服务器上我们需要这个API(模拟服务器端jquery所需的窗口对象)
// somefile.js
var jsdom = require("jsdom").jsdom;
var window = jsdom().parentWindow();
var $ = require("jquery")(window);
// my tests that depend on $
// ...
在客户端,我们需要一个稍微不同的API
// somefile.js
// jsdom is not required obviously
// window is not needed because we don't have to pass it to jquery explicitly
// assume `require` is available
// requiring jquery is different
var $ = require("jquery");
// my tests that depend on $
// ...
这是一个很大的问题!
每个环境的设置都不同,但重复每个测试只是为了更改设置是完全愚蠢的。
我觉得我忽视了一些简单的事情。
如何编写需要jQuery
的单个测试文件并在多个环境中运行?
npm test
在终端中其他信息
这些信息不一定是解决这里根本问题的必要条件;一般的解决方案是可以接受但是,我正在使用的工具可能包含更容易解决此问题的组件。
mocha
进行测试webpack
jsdom
结婚,如果有更好的东西,那就让我们用吧!phantomjs
,但如果它让我的生活更轻松,那就让我们做吧!其他想法:
答案 0 :(得分:1)
我正在使用karma直接从命令行运行我的单元测试(CI也是gulp)。
Karma使用phantomjs在无头浏览器中运行测试,您可以将其配置为在真实浏览器中运行。
gulp内部的业力配置示例:
// Run karma tests
gulp.task("unit", function (done) {
var parseConfig = require("karma/lib/config").parseConfig,
server = karma.server,
karmaConfig = path.resolve("karma.conf.js"),
config = parseConfig(karmaConfig, {
singleRun: true,
client: {
specRegexp: ".spec.js$"
}
});
server.start(config, done);
});
如果我的测试需要大约。运行750次测试需要10秒钟,所以速度非常快。