jvi*_*tti 14 javascript unit-testing angularjs karma-runner
在为指令编写测试时,我遇到了这个错误(使用generator-angular-module):
SRC/capitalize.js:
'use strict';
angular.module('jviotti.string', []).filter('capitalize', function() {
return function(input) {
return input.replace(/\w\S*/g, function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
};
});
Run Code Online (Sandbox Code Playgroud)
测试/规格/ capitalize.js:
'use strict';
describe('Filter: capitalize', function () {
// load the controller's module
beforeEach(module('jviotti.string'));
var capitalize;
beforeEach(inject(function($filter) {
capitalize = $filter('capitalize');
}));
it('should capitalize a string', function () {
expect(capitalize('hello')).toBe('Hello');
});
});
Run Code Online (Sandbox Code Playgroud)
但是,当使用PhantomJS运行Karma时,我得到:
PhantomJS 1.9.2 (Mac OS X) Filter: capitalize should capitalize a string FAILED
TypeError: Attempted to assign to readonly property.
at workFn (/Users/jviotti/Projects/angular-string/bower_components/angular-mocks/angular-mocks.js:2107)
TypeError: 'undefined' is not a function (evaluating 'capitalize('hello')')
at /Users/jviotti/Projects/angular-string/test/spec/capitalize.js:14
PhantomJS 1.9.2 (Mac OS X): Executed 2 of 2 (1 FAILED) (0.1 secs / 0.017 secs)
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
Kon*_*cki 31
改变karma.conf.js
logLevel: config.LOG_INFO,
Run Code Online (Sandbox Code Playgroud)
至
logLevel: config.LOG_DEBUG,
Run Code Online (Sandbox Code Playgroud)
和PhantomJS到Firefox,然后你会得到更详细的错误信息
另一种方法(在Angular 1.2.2中)是在angular-mocks.js文件中注释掉2107行:
if(e.stack && errorForStack) e.stack += '\n' + errorForStack.stack;
Run Code Online (Sandbox Code Playgroud)
显然在PhantomJS中,错误堆栈是只读的.
编辑:
在Angular 1.2.10+中不应再出现此错误(github.com/angular/angular.js/pull/5047)(谢谢sherlocken!)
| 归档时间: |
|
| 查看次数: |
32457 次 |
| 最近记录: |