【问题标题】:Underscore error when running karma + jasmine test运行 karma + jasmine 测试时出现下划线错误
【发布时间】:2015-09-18 18:36:01
【问题描述】:

我是前端代码测试的新手。在我的 js MarionetteJs 应用程序上运行 karma + jasmine 测试时出现一个奇怪的错误。我认为这可能是因为在我定义 Marionette 视图时尚未加载下划线模板。

我的 karma.conf.js:

'use strict';

module.exports = function (config) {
    config.set({
        basePath: '',
        frameworks: ['browserify', 'jasmine-ajax', 'jasmine-jquery', 'jasmine'],
        exclude: ["*.jst"],
        logLevel: 'LOG_DEBUG',
        reporters: ['progress'],
        preprocessors: {
            'tests/unit/**/test_*.js': ['browserify']
        },
        colors: true,
        browsers: ['PhantomJS'],
        singleRun: true,
        autoWatch: false,
        plugins: [
            'karma-coverage',
            'karma-browserify',
            'karma-jasmine-ajax',
            'karma-jasmine-jquery',
            'karma-jasmine',
            'karma-junit-reporter',
            'karma-phantomjs-launcher'
        ],
        browserify: {
            debug: true,
            transform: [
                'browserify-jst',
                'browserify-shim',
                'browserify-istanbul'
            ]
        },
        files: [
            'http://code.jquery.com/jquery-1.11.2.min.js',
            'tests/unit/**/test_*.js'
        ]
    });
};

这只是我正在尝试运行的虚拟测试:

'use strict';

var CompanyListView = require('../../company_list.js');

$(function () {
    describe("A page", function () {
        it("contains login form", function () {            
            expect(true).toBe(true);
        });
    });
});

要求company_list.js文件时发生错误:

PhantomJS 1.9.8 (Linux 0.0.0) ERROR
  TypeError: 'undefined' is not a function (evaluating 'text.replace')
  at /tmp/082eb28c15575edda85ae0f9ce2019a6.browserify:17883:0 <- node_modules/underscore/underscore.js:1431:0

company_list.js:

var $ = require('jquery');
var _ = require('underscore');
var Backbone = require('backbone');
var Marionette = require('backbone.marionette');

var tplCompany = require('../templates/company_list.jst');

module.exports = Marionette.CompositeView.extend({
    template: _.template(tplCompany, {variable: 'data'}),
});

我做错了什么?

感谢您的帮助。

【问题讨论】:

  • 我猜它无法加载var tplCompany = require('../templates/company_list.jst');并将undefined传递给_.template,所以下划线会抛出错误。
  • 不,当它无法加载任何文件时,browserify 会抛出如下内容: ERROR [framework.browserify]: Error: Cannot find module 'pages/app/js/seller/templates/company_list.jst '来自'/seller/views'
  • 但是变量tplCompany在传递给_.template之前是否有实际值?
  • 当我在浏览器中运行应用程序时,它具有正确的值(包含 html),但是当我使用 karma 运行 jasmine 测试时,它不会在我的终端中输出任何内容,所以,我不知道 :( 而且我找不到任何解决方案来调试它。
  • 只需console.log('HERE', tplCompany) 应该将结果打印到终端(添加一些明显的字符串,如HERE,以防变量为空,这样你就看不到任何东西)。顺便说一句,我在您的 karma.conf.js 中看到了一个有趣的选项:exclude: ["*.jst"],这可能是模板未加载的原因吗?

标签: javascript unit-testing jasmine marionette karma-jasmine


【解决方案1】:

解决方案在 karma.conf.js 中:

transform: [
      'browserify-jst',
      'browserify-shim',
      'browserify-istanbul'
]

必须是:

transform: [
    ['stringify', {extensions: ['.html', '.jst'], minify: false}],
    'browserify-shim',
    'browserify-istanbul'
]

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 2019-06-03
    • 2015-03-23
    • 1970-01-01
    • 2018-10-04
    • 2016-10-06
    • 2014-07-29
    • 2016-08-08
    • 2019-02-17
    相关资源
    最近更新 更多