浏览器测试运行器和 CLI 之间的自动化测试差异?

Automated testing differences between browser test runner and CLI?

我有一个 Ember CLI 插件项目 -- ui-slider-input -- 它有一个非常基本的 JS 滑块小部件包装器。这是作为一个组件实现的,并且运行开箱即用的单元测试以确定组件是否呈现。这是奇怪的部分...

  1. 在浏览器中运行没有报错(UiSliderComponent: it renders)
  2. 当我使用 npm test 从 CLI 运行相同的测试时(也可以使用 ember test ...没有区别)它失败并显示以下堆栈跟踪:

 not ok 7 PhantomJS 1.9 - UiSliderInputComponent: it renders
     ---
     actual: >
         null
     message: >
         Died on test #2     at http://localhost:7357/assets/test-support.js:418
             at test (http://localhost:7357/assets/test-support.js:284)
             at http://localhost:7357/assets/dummy.js:273
             at http://localhost:7357/assets/vendor.js:77
             at http://localhost:7357/assets/test-loader.js:14: 'undefined' is not a function (evaluating 'this._applyPrecision.bind(this)')

这不是 Ember CLI 问题,而是 PhantomJS 问题。

PhantomJS 缺少 Function.prototype.bind,您可以在堆栈跟踪中看到它正在被调用。 This GitHub issue讨论问题。最简单的解决方案是添加一个:

Function.prototype.bind = Function.prototype.bind || function (thisp) {
    var fn = this;
    return function () {
        return fn.apply(thisp, arguments);
    };
};

有关详细信息,请参阅线程。