【问题标题】:How to test browserify project using karma/jasmine如何使用 karma/jasmine 测试 browserify 项目
【发布时间】:2014-10-23 12:30:49
【问题描述】:

我对测试的概念完全陌生,我需要一个可靠的例子来说明如何在我的项目中进行测试:

我有一个像这样的 gulp 文件(不是全部,只是重要部分)

gulp.task('bundle', function() {
    gulp.src('public/angular-app/main.js')
        .pipe(browserify({
            debug: true
        }))
        .pipe(gulp.dest('public/min-js'));           
});

这是我的 main.js 的一小部分:

'use strict';

    angular.module('myApp', [
        'ui.router',
        'ui.bootstrap',
        'ngSanitize',
        'ngFx',
        ...
    ], ['$interpolateProvider',
        function($interpolateProvider) {
            $interpolateProvider.startSymbol('{{');
            $interpolateProvider.endSymbol('}}');
        }
    ])

    .config(require('./config/routes'))

        .config(require('./config/authInterceptor'))
        .run(require('./config/runPhase'))
        .run(require('./config/xeditable'))



        .controller('homeController', require('./controllers/homeController'))
        .controller('modalInstanceCtrl', require('./controllers/modalInstanceCtrl'))
        .controller('modalparticipantCtrl',require('./controllers/modalParticipantCtrl'))
        .controller('generatorController',require('./controllers/generatorController'))
        .controller('navController', require('./controllers/navController'))
        .controller('signInController', require('./controllers/signInController'))
        .controller('pricingController', require('./controllers/pricingController'))
        .controller('howItWorksController',require('./controllers/howItWorks'))
        ...

现在这是我的 karma 配置文件:

module.exports = function(config) {
  config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '',


    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine'],


    // list of files / patterns to load in the browser
    files: [
      'public/vendor/jquery/dist/jquery.js',
      'public/vendor/angular/angular.js',
      'public/vendor/angular-mocks/angular-mocks.js',
      'public/angular-app/**/*.js',
      'test/**/*Spec.js'
    ],


    // list of files to exclude
    exclude: [
    ],

当我使用 karma start 运行 karma 时,这就是我得到的:

未捕获的引用错误:require 未定义 在 root/public/angular-app/main.js

所以我的问题很简单,我该如何进行测试,例如,在我的 homeController...

//更新

所以我将我的测试文件更新为:

describe("An Angularjs test suite",function(){
    var target, rootScope;
    beforeEach(inject(function($rootScope) {
      rootScope = $rootScope;

      // Mock everything here
      spyOn(rootScope, "$on")
    }));

    beforeEach(inject(function(homeController) {
      target = homeController;
    }));

    it('should have called rootScope.$on', function(){
      expect(rootScope.$on).toHaveBeenCalled();
    });

});

和我的配置文件到这个:

// list of files / patterns to load in the browser
files: [
  'public/vendor/jquery/dist/jquery.js',
  'public/vendor/angular/angular.js',
  'public/vendor/angular-mocks/angular-mocks.js',
  'public/min-js/main.js',
  'test/**/*Spec.js'
],


// list of files to exclude
exclude: [
],


browserify: {
        watch: true,
        debug: true
},

preprocessors: {
    'test/*': ['browserify']
},

仍然没有任何效果,首先他说“未知提供者 homeControllerProvider”, 现在,如果我删除它们:

beforeEach(inject(function(homeController) {
          target = homeController;
        }));

它仍然给我错误,预计 spy $on 会被调用,我该如何解决这个问题?

【问题讨论】:

    标签: jasmine karma-runner browserify karma-jasmine


    【解决方案1】:

    您需要在运行测试之前通知 Karma 运行 Browserify。

    您可以将其添加到您的 Karma 配置中:

        {
            browserify: {
                watch: true,
                debug: true
            },
            preprocessors: {
                'test/*': ['browserify']
            }
        }
    

    Karma 配置文件参考:http://karma-runner.github.io/0.12/config/configuration-file.html

    或者看看我的一个使用 Karma 进行测试的项目:smild

    【讨论】:

    • 我开玩笑地需要一个简单的例子来说明当我的所有程序都根据我在那里写的内容进行浏览时如何注入 homecontroller 模块...gulp 正在使用这个 main.js 并将其缩小到另一个main.js,现在如果我将它包含在我的测试配置文件中,我怎么能告诉他:看,注入 homecontroller,用它做一些事情......
    • 你需要来自 AngularJS 团队的 angular.mock 模块。这是一个可以帮助你的问题stackoverflow.com/questions/16022320/…
    猜你喜欢
    • 2016-04-24
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2014-09-20
    • 2013-05-15
    相关资源
    最近更新 更多