那是满口的。
我觉得我要求登月,但我希望能够使用Resharper和Karma为我的代码运行我的Jasmine测试,该代码定义了需要包含Angular模块的模块。通过resharper运行测试对于开发非常有用 - 开发人员可以交互式运行。通过karma运行相同的测试对于持续集成非常有用 - 自动化测试执行。
我发现这篇文章后感到很兴奋:Jasmine and Requirejs in Resharper 7。它显示了如何在resharper中为require模块运行jaseminejs测试。是啊!但它利用了命名的requirejs模块。在某些情况下,命名模块存在问题。事实上,当模块被命名时,我无法获得业力来运行相同的测试。
例如,这是一个定义角度模块的需求模块(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和karma运行相同的测试(使用require和angular)?