2015-11-17 29 views
3

我使用Ember.Logger.error:测试Ember.Logger.error断言

if (isInvalid) { 
    Ember.Logger.error('this is invalid'); 
} 

我想测试它在qunit:

assert.throws(() => myFunction(), /this is invalid/, 'error was thrown'); 

assert.throws不捕获错误。如果我用简单的throw语句替换Ember.Logger.error,确实有办法测试记录的Ember错误。任何人都知道的方式?

UPDATE:

我做了一个小插件,增加了这种能力QUnit。你可以得到它here

+0

是什么样的测试?它是组件,控制器,辅助单元测试吗? –

回答

3

好了,所以我做了一个研究它是如何在灰烬做,我所看到的是,以测试它的做法:

这里的示例测试功能可用于测试在帮助单元测试中调用Ember.Logger.error

/* global Ember */ 

import { demo } from '../../../helpers/demo'; 
import { module, test } from 'qunit'; 

module('Unit | Helper | demo'); 

test('catching log', function(assert) { 
    assert.expect(1); // define how many assertions we expect 

    const oldError = Ember.Logger.error; // store original error function in variable 

    Ember.Logger.error = function(message) { // monkey patch with our custom function 
    assert.equal(message, 'this is invalid', 'error was thrown'); // our assertion 
    }; 

    demo(); // actually call function 

    Ember.Logger.error = oldError; // restore original error function 
}); 
+0

这很好用!这有点冗长,所以我决定把它封装在一个自定义的qunit断言中。下一步是制作一个小插件,让任何应用程序访问新的qunit断言“logs”。另外,在寻找初始化程序的等效测试时,我遇到了这个问题(https://github.com/rwjblue/ember-qunit/issues/140)。感谢您的参与! – nullnullnull

+0

世界很小。 :D –

+0

其实,在ember qunit测试中是否有与初始值设定项相同的值?据我所知,没有。至少对于不运行'App.injectTestHelpers()'的单元测试。 – nullnullnull