“它()”似乎陷入了茉莉花测试

时间:2015-06-25 13:23:45

标签: jasmine karma-jasmine

我正在使用因果报应茉莉花做单元测试,我正在尝试做我的第一次测试。我在这里使用第一个例子: https://jasmine.github.io/1.3/introduction.html#section-Matchers

它似乎没有做任何事情,所以我添加了一些日志记录并试图让它捕获错误:

console.log('a');
describe("A suite", function() {
    console.log('b', typeof(it));
    it("contains spec with an expectation", function() {
        console.log('c');
        expect(true).toBe(false);
    });
});

这就是我的输出结果:

Chrome 43.0.2357 (Mac OS X 10.10.3) LOG: 'a'

Chrome 43.0.2357 (Mac OS X 10.10.3) LOG: 'b', 'function'

所以看起来“it”函数内部没有任何内容被执行,因为'c'永远不会被输出。我错过了什么吗?

更新 所以这是我正在运行的艰巨任务:

module.exports = function (grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

        karma: {
            unit: {
                configFile: 'karma.conf.js'
            }
        }
    });

    grunt.loadNpmTasks('grunt-karma');
    grunt.registerTask('default', ['karma']);
};

这是我的package.json,其中包含已安装的npm包列表:

{
  "name": "abc.com",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "bcrypt": "^0.8.3",
    "body-parser": "^1.0.2",
    "bower": "^1.4.1",
    "ejs": "^2.3.1",
    "email-templates": "^2.0.0-beta.1",
    "error-handler": "^0.1.4",
    "errorhandler": "^1.3.6",
    "express": "~4.1.1",
    "express-session": "^1.11.2",
    "grunt": "^0.4.5",
    "jade": "~0.31.2",
    "jasmine": "^2.3.1",
    "jasmine-runner": "^0.2.9",
    "karma": "^0.12.37",
    "karma-chrome-launcher": "^0.2.0",
    "karma-jasmine": "^0.3.5",
    "karma-junit-reporter": "^0.2.2",
    "method-override": "^1.0.0",
    "morgan": "^1.0.0",
    "mysql": "^2.6.2",
    "nodemailer": "^1.3.4",
    "protractor": "^1.1.1",
    "shelljs": "^0.2.6",
    "xoauth2": "^1.0.0"
  },
  "scripts": {
    "prestart": "npm install",
    "postinstall": "bower install --allow-root",
    "start": "supervisor -n error app.js",
    "pretest": "npm install",
    "test": "karma start karma.conf.js",
    "test-single-run": "karma start karma.conf.js  --single-run",
    "preupdate-webdriver": "npm install",
    "update-webdriver": "webdriver-manager update",
    "preprotractor": "npm run update-webdriver",
    "protractor": "protractor e2e-tests/protractor.conf.js",
    "update-index-async": "node -e \"require('shelljs/global'); sed('-i', /\\/\\/@@NG_LOADER_START@@[\\s\\S]*\\/\\/@@NG_LOADER_END@@/, '//@@NG_LOADER_START@@\\n' + sed(/sourceMappingURL=angular-loader.min.js.map/,'sourceMappingURL=bower_components/angular-loader/angular-loader.min.js.map','app/bower_components/angular-loader/angular-loader.min.js') + '\\n//@@NG_LOADER_END@@', 'app/index-async.html');\""
  },
  "configs": {
    "client_javascript_paths": [
      "public/components/common/helpers.js",
      "public/libs/bower_components/html5-boilerplate/js/vendor/modernizr-2.6.2.min.js",
      "public/libs/bower_components/jquery/dist/jquery.min.js",
      "public/libs/bower_components/angular/angular.js",
      "public/libs/bower_components/angular-route/angular-route.js",
      "public/libs/bower_components/angular-resource/angular-resource.js",
      "public/libs/bower_components/d3/d3.js",
      "public/libs/bower_components/c3/c3.js",
      "public/libs/bower_components/angular-chart/angular-chart.js",
      "public/libs/bower_components/moment/moment.js",
      "public/components/common/filters.js",
      "public/components/notify/notify.js",
      "public/components/static/static.js",
      "public/components/account/account.js",
      "public/components/auth/auth.js",
      "public/components/formatted-table/formatted-table.js",
      "public/app.js",
      "public/libs/underscore.js"
    ]
  },
  "devDependencies": {
    "jasmine": "^2.3.1",
    "jasmine-core": "^2.3.4",
    "karma": "^0.12.37",
    "karma-chrome-launcher": "^0.2.0",
    "karma-jasmine": "^0.3.5",
    "karma-phantomjs-launcher": "^0.2.0",
    "phantomjs": "^1.9.17"
  }
}

最后,这是我的karma.conf.js

module.exports = function(config) {
  var package = require('./package.json')
  console.log(package.configs.client_javascript_paths);
  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', 'requirejs'],

    // list of files / patterns to load in the browser
    files: package.configs.client_javascript_paths.concat([
            'public/components/**/*.tests.js'
    ]),
    // list of files to exclude
    exclude: [
    ],
    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
    },
    // test results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['progress'],
    // web server port
    port: 9876,
    // enable / disable colors in the output (reporters and logs)
    colors: true,
    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,
    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: true,
    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['Chrome'],
    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: false
  });
};

我只是跑

 grunt

启动它以使输出位于此顶部。

1 个答案:

答案 0 :(得分:1)

由于requirejs框架与karma一起使用,因此发生了这种情况。如果你不需要它,那么你可以从karma.conf.js中删除它,测试就可以了。但如果您确实需要它,那么我建议您查看此documentation page,说明如何为requirejs配置karma,它实际上需要一个额外的文件。

使用您在问题中提供的文件,我可以在执行以下步骤后执行测试:

  • 首先创建karma.conf.js
  • 的备份
  • 使用CLI命令karma init重新启动karma config
  • 的创建 选择Do you want to use Require.js ? 步骤Yes上的
  • 选择Do you wanna generate a bootstrap file for RequireJS?
  • 步骤Yes上的
  • 从备份中复制了所有内容,并将karma init生成的文件(应该称为test-main.js)添加到已监视文件列表中:

    module.exports = function(config) {
        var package = require('./package.json');
        config.set({
    
            // ...
    
            files: package.configs.client_javascript_paths.concat([
                'public/components/**/*.tests.js',
                'test-main.js', // here it is
            ])
    
            // ...
    
        });
    };