使用Resharper和Karma在Require模块中对Angular模块运行Jasmine测试

时间:2014-02-28 21:21:00

标签: angularjs requirejs resharper jasmine karma-runner

那是满口的。

我觉得我要求登月,但我希望能够使用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)?

0 个答案:

没有答案