gpt4 book ai didi

javascript - 使用 RequireJS 文本插件

转载 作者:行者123 更新时间:2023-11-29 21:13:26 24 4
gpt4 key购买 nike

我正在使用 Karma 对某些代码运行测试。

在由 Karma 运行之前,测试和代码都被转译(ES6 => ES5 使用 babel)。

效果很好,测试运行良好。

但是如果我尝试使用任何被测试文件中的 text! 插件...

import template from 'text!./template.html';

...我明白了:

There is no timestamp for /base/src/text.js!
Uncaught Error: Script error for "text", needed by: text!app/template.html_unnormalized2
http://requirejs.org/docs/errors.html#scripterror
Uncaught Error: Load timeout for modules: text!app/template.html_unnormalized2

有人知道为什么会这样吗?

dist 文件夹中的构建工件(即被测项目)包含成功编码的文本 RequireJS 项目,例如:

define('text!app/template.html',[],function () { return '<div>foo</div>';});

附加信息

test-main.js

var TEST_REGEXP = /(spec|test)\.js$/i;
var allTestFiles = [];
Object.keys(window.__karma__.files).forEach(function(file) {
if (TEST_REGEXP.test(file)) {
var normalizedTestModule = file.replace(/^\/base\/|\.js$/g, '');
allTestFiles.push(normalizedTestModule);
}
});

require.config({
baseUrl: '/base/src',
paths: {},
shim: {},
deps: allTestFiles,
callback: window.__karma__.start
});

karma.conf.js

module.exports = function(config) {
'use strict';
var path = require('path');
var cdn = 'http://localhost:55635/modules/';
var basePath = path.dirname(__filename);

config.set({
basePath: '../../..',
frameworks: [
'requirejs',
'jasmine'
],
files: [
{
pattern: path.join(basePath, 'test-transpiled', '*-spec.js'),
included: false
},
path.join(basePath, 'dist', 'artifacts', 'app.js'),
path.join(basePath, 'test', 'unit', 'test-main.js')
],
proxies: {
'/cdn/': cdn
},
exclude: [],
preprocessors: {},
reporters: ['dots'],
colors: true,
autoWatch: false,
singleRun: false,
browsers: ['Chrome'],
});
};

编辑:

我在 karma.conf.js 中添加了以下内容:

files: [
{
pattern: path.join(basePath, 'node_modules/require-plugins/text/text.js'),
included: false
},
// ...
],

我在运行测试时继续遇到错误:

There is no timestamp for /base/src/text.js! 

大概是因为我需要在 test-main.js 的路径部分添加“文本”?

require.config({
baseUrl: '/base/src',
paths: {
'text': '../node_modules/require-plugins/text/text'
},
// ...
});

但是我已经尝试了 baseUrltext 路径中的路径的各种组合,但我无法让它停止 404-ing。

最佳答案

您在 karma.conf.js 中的 files 选项不包含 text 插件,这就是为什么您会收到没有它的时间戳。

将一个项目添加到您的 files 列表中,该项目命中文件系统上的 text 插件,并确保您有 included: false为了它。 RequireJS 插件就像其他模块一样:RequireJS 必须能够加载它们才能使用它们。

您可能还需要根据放置插件的位置在 test-main.js 中设置 paths。 RequireJS 已经在 /base/src/text.js 中寻找它。如果您找到它以便在该 URL 提供插件,则无需设置 paths。如果你把它放在其他地方,那么你确实需要设置 paths。像这样的东西:

paths: {
text: 'path/to/text',
}

请记住,paths 中的路径是相对于您的 baseUrl 设置进行解释的。

关于javascript - 使用 RequireJS 文本插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40614435/

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