0

我正在尝试使用来测试一个用于绘制图表Karma的简单脚本。d3.js该脚本用于browserify导入d3.

var d3 = require('d3');
// Some code...

我已配置Karma为使用browserifyPhantomJS针对此文件运行测试,但是无论配置如何,它总是会因以下错误而失败:

PhantomJS 1.9.8 (Mac OS X 0.0.0) ERROR
TypeError: 'null' is not an object (evaluating 'node.getAttribute')

我尝试使用browserify-shim,但没有任何区别。这是我的摘录karma.conf.js

frameworks: ['browserify', 'mocha'],

files: [
  'src/static/js/*.js',
  'test/js/*.js'
],

preprocessors: {
  'src/static/js/*.js': ['browserify'],
  'test/js/*.js': ['browserify']
},

browserify: {
  debug: true,
  transform: ['debowerify', 'browserify-shim']
},

browsers: ['PhantomJS']

任何解决此问题的帮助将不胜感激。只是为了澄清,实际的代码工作正常,它只是通过Karma它打破。

4

1 回答 1

0

问题是我试图测试的脚本是在末尾加载HTML body并使用d3. 当运行它时,它会在加载之前Karma注入脚本,这会导致失败,因为它期望一个元素存在。DOMd3DOM

解决方法是从脚本中删除函数调用并将其添加到 my 的末尾HTML body

<body>
    <!-- HTML code -->
    <script>
        myFunction();
    </script>
</body>

由于browserify使事情变得尴尬,您还必须将该函数附加到窗口对象,以便从脚本外部调用它:

window.myFunction = function() {
    // code
}

这现在可以在浏览器和使用 Karma 中使用。

于 2015-06-10T12:39:03.303 回答