这是新手问题,但我无法在StackOverflow上找到答案。
我正在尝试在Webstorm中使用Karma。在我的Spec文件中,我试图要求 依赖文件,但'require'本身没有定义!
它在webstorm控制下的Chrome中运行。这是我的Karma.conf.js文件和我的Spec.js文件。
基本问题是'define','require'和'requirejs'都是UNDEFINED。那我怎么能包括其中任何一个?!
karma.conf.js
// Karma configuration
// Generated on Tue Jul 19 2016 23:26:58 GMT-0700 (PDT)
requirejs = require('requirejs');
requirejs(["node-and-require"]);
requirejs("/ob/proj/uniformjs/main");
module.exports = function(config) {
requirejs("/ob/proj/uniformjs/main");
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: 'js',
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],
// list of files / patterns to load in the browser
files: [
'spec/**/*Spec.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: {
},
// spec 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: false,
// 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,
// Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity
})
}
lexcore / SimpleUnitSpec.js
describe("A Unit", function () {
var u; // The unit being tested
beforeEach(function(){
var requirejs = require("requirejs");
var SimpleUnit = requirejs("lexcore/SimpleUnit");
u = SimpleUnit();
});
it("to be created and defined", function(){
expect(u).toBeTruthy();
});
});
生成此错误:
ReferenceError: require is not defined
at Suite.<anonymous> (....
答案 0 :(得分:1)
这是因为浏览器/客户端JavaScript中不存在require()。
您有三种选择:
使用标签。 使用CommmonJS实现。像Node.js这样的同步依赖 使用AMD实现。
npm install requirejs
此选项将安装最新版本。 下载r.js
如果你不想使用npm,你可以直接获得r.js:
从download page下载r.js并将其放入您的项目中。 从r.js repo获取源代码,并通过“node dist.js”生成r.js,或者从dist目录中获取快照。
用法
这些说明假定npm安装'requirejs'。如果直接使用r.js文件,请将require('requirejs')替换为require('。/ path / to / r.js')。
基本用法是:require('requirejs')
将配置中的主要js文件的“require”函数传递给requirejs。
示例:
var requirejs = require('requirejs');
requirejs.config({
//Pass the top-level main.js/index.js require
//function to requirejs so that node modules
//are loaded relative to the top-level JS file.
nodeRequire: require
});
requirejs(['foo', 'bar'],
function (foo, bar) {
//foo and bar are loaded according to requirejs
//config, but if not found, then node's require
//is used to load the module.
});
答案 1 :(得分:0)
我认为Thennarasan的答案可能有效,所以我选择了它。
但这是我如何设法解决自己的问题:
(1)在karma init运行期间,我指定使用requirejs (2)我重构了我的代码以使用requirejs格式
正在发挥作用的问题是“需要&#39;在浏览器中不存在 并且Karma将您的节点代码注入浏览器。