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

时间:2015-01-02 11:55:12

标签: ember.js ember-cli

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

  1. 在浏览器(UiSliderComponent: it renders
  2. 中运行时没有错误
  3. 当我使用npm test从CLI运行相同的测试时(也可能使用ember test ...没有区别),它会因以下堆栈跟踪而失败:
  4. 	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)')

1 个答案:

答案 0 :(得分:3)

这不是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);
    };
};

有关详细信息,请参阅主题。