gpt4 book ai didi

javascript - 为 es6 编译的测试代码

转载 作者:可可西里 更新时间:2023-11-01 02:45:38 24 4
gpt4 key购买 nike

我正准备使用 Qunit 为 Backbone 应用程序编写一些测试,该应用程序是为 ES6 编写的,应用了 babel.js,以便它可以在现代浏览器中运行。为了确保我正确设置了 qunit 并正确指定了所有路径,我首先测试了一个用 ES5 编写的 Backbone 模型,一切都按预期工作。但是,我随后将 bundle.js(其中包含应用了 babel.js 的 ES6 代码的结果)包含到我的 tests/index.html 中,并编写了

 test ( "Code transformed by babel.js contained in bundle.js can be tested", function(){
expect(1);
var es6model = new ES6Model();
equal( es6model.get("defaultproperty"), "defaultstring", "defaultproperty should be defaultstring");
})

它告诉我 ES6Model 没有定义。

问题:由 babeljs 转换的代码是否有某些东西会使使用 Qunit 进行测试更具挑战性?

除了所有babel写在文件顶部的复杂js,bundle.js中的代码是这样的

var Model = Backbone.Model;
var View = Backbone.View;
var Collection = Backbone.Collection;
var Router = Backbone.Router;
var LocalStorage = Backbone.LocalStorage;

var ES6Model = (function (Model) {
function ES6Model() {
_classCallCheck(this, ES6Model);

if (Model != null) {
Model.apply(this, arguments);
}
}

_inherits(ES6Model, Model);

_prototypeProperties(Gopher, null, {
defaults: {
value: function defaults() {

return {
defaultproperty: "defaultstring"

};
},
writable: true,
configurable: true
}
});

return ES6Model;
})(Model);

更新

我将 babel.js 创建的所有代码包含在一个名为 bundle.js 的文件中,并将其包含在我的 index.html 中,就像我将任何其他 js 文件一样,它运行没有问题,这就是为什么我认为我可以像任何其他 js 代码一样测试它。但是,应该注意(正如评论者指出的那样)babel.js 创建的代码包含在一个模块中。这就是 bundle.js 从我之后要测试的模型开始的方式

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
"use strict";

更新

我正在使用 browserify 将 babel 应用于创建 bundle 的 ES6 代码的各种文件。为了运行测试,我执行了 npm run test 并编译了 bundle,我尝试了这两个(其中一个使用了 modules --ignore)但是它们都不起作用

“脚本”:{

    "test": "./node_modules/karma/bin/karma start --log-level debug",
"build-js": "browserify app/app.js app/views.js app/models.js app/d3charts.js -t babelify > app/bundle.js",
"t-build": "browserify app/app.js app/views.js app/models.js app/d3charts.js -t [babelify --modules ignore] > app/test/test-bundle.js"
},

(该应用程序是一个 Backbone.js 应用程序)。

这是我的业力配置文件。我没有任何进一步的配置(所以我猜我包含 karma-require 是一种浪费,但也许是必要的......)

module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['qunit'],
plugins: ['karma-qunit', 'karma-phantomjs-launcher', 'karma-requirejs'],

files : [
'app/test/jquery.js',
'app/test/d3.js',
'app/test/json2.js',
'app/test/underscore.js',
'app/test/backbone.js',
'app/backbone.localStorage.js',

'app/test/test-bundle.js',
'app/test/tests.js'

],


reporters: ['progress'],

// web server port
port: 8080,

// 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: false,

// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ['PhantomJS'],

// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: true,

// See http://stackoverflow.com/a/27873086/1517919
customLaunchers: {
Chrome_sandbox: {
base: 'Chrome',
flags: ['--no-sandbox']
}
}
});
};

最佳答案

作为引用,他们使用 traceur 执行此操作的方法是将 traceur-runtime.js 文件编译到代码中(参见 https://github.com/google/traceur-compiler/issues/777 - 类似的变量未定义错误)。

例如

traceur --out out/src/yourcode.js --script lib/traceur-runtime.js --script test/yourcode.js

(参见离线编译 https://github.com/google/traceur-compiler/wiki/Compiling-Offline)。

关于javascript - 为 es6 编译的测试代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28755575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com