那是满口的 .
我觉得我要求登月,但我希望能够使用Resharper和Karma为我的代码运行我的Jasmine测试,该代码定义了需要包含Angular模块的模块 . 通过resharper运行测试对于开发非常有用 - 开发人员可以交互式运行 . 通过karma运行相同的测试对于持续集成非常有用 - 自动化测试执行 .
当我发现这篇文章时,我很兴奋:Jasmine and Requirejs in Resharper 7 . 它显示了如何在resharper中为require模块运行jaseminejs测试 . 是啊!但它利用了命名的requirejs模块 . 在某些情况下,命名模块存在问题 . 事实上,当模块被命名时,我无法获得业力来运行相同的测试 .
例如,这是一个require模块,它定义了一个角度模块(app / stringCalculator.js):
define(['angular'], function () {
angular.module('stringCalculatorModule', []).factory('stringCalculator', function() {
return {
calculate: function (string) {
var result = 0;
string.split("+").forEach(function(number) {
result += parseInt(number);
});
return result;
}
};
});
});
并测试(Tests / stringCalculatorSpec.js):
/// <reference path="../Lib/require.js" />
describe('string calculator', function () {
var modulesLoaded;
beforeEach(function () {
if (!modulesLoaded) {
require(['stringCalculator'], function () {
modulesLoaded = true;
});
waitsFor(function () {
return modulesLoaded;
}, 'loading external module', 1000);
runs(function () {
module('stringCalculatorModule');
});
}
});
it('should add 1 and 2', function () {
inject(function (stringCalculator) {
var result = stringCalculator.calculate('1+2');
expect(result).toEqual(3);
});
});
});
这里是我的requirejs config(require.conf.js):
requirejs.config({
// Note: Karma serves files from '/base'
baseUrl: '/base/App',
paths: {
angular: '/base/Lib/angular',
ngMocks: '/base/Lib/angular-mocks',
jQuery: '/base/Lib/jquery',
},
shim: {
ngMocks: { deps: ['angular'] },
},
deps: function() {
var items = Object.keys(window.__karma__.files).filter(function(file) {
return /Spec\.js$/.test(file);
});
items.push('ngMocks');
return items;
}(),
callback: window.__karma__.start
});
而我的karmajs配置(karma.conf.js):
module.exports = function (config) {
config.set({
autoWatch: true,
browsers: ['PhantomJS'],
frameworks: ['requirejs', 'jasmine'],
files: [
'require.conf.js',
{ pattern: 'Tests/**/*.js', included: false },
{ pattern: 'App/**/*.js', included: false },
{ pattern: 'Lib/**/*.js', included: false },
],
});
}
此代码确实在业力中运行,但是resharper无法运行测试 . 我得到的错误是'module'和'inject'没有定义 . 这是有道理的,因为resharper不知道加载angular-mocks.js .
然后,我不确定resharper是否可以使用未命名的require模块 . 即使我将一个无意义的名称传递给require(),我也不会收到错误 . 即使没有错误,我也不认为它正在加载任何东西 .
有谁知道如何获得resharper和业力来运行相同的测试(使用require和angular)?