- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我已经尝试了很多方法,但在运行 Karma 时似乎无法加载固定装置。我试过使用 html2js
和 karma-jasmine-jquery
—我倾向于后者,但无论哪个将我的固定装置加载到 DOM 中,我都会接受)—但据我所知,当我的测试运行时,它没有被加载并附加到 DOM。
我的目录结构很简单:
img/
↳ mac.png
↳ link.png
↳ pocketwatch.png
js/
↳ spriteloader.js
↳ spriteloader.spec.js
karma/
↳ imagelist.fix.html
↳ karma.conf.js
Gruntfile.coffee
index.html
grunt.config.coffee
package.json
这些是我安装的节点模块:
grunt 0.4.5
grunt-contrib-jshint 0.10.0
grunt-contrib-watch 0.6.1
grunt-karma 0.9.0
karma 0.12.23
karma-chrome-launcher 0.1.4
karma-firefox-launcher 0.1.3
karma-html2js-preprocessor": "^0.1.0",
karma-jasmine 0.2.0
karma-jasmine-jquery 0.1.1
karma-safari-launcher 0.1.1
karma-story-reporter 0.2.2
这是我的 karma.conf.js
设置:
basePath: '../',
frameworks: ['jasmine-jquery', 'jasmine'],
files: [
// Source and spec files
{
pattern: 'js/*.js',
watched: true,
served: true,
included: true
},
// Fixtures
{
pattern: 'karma/*.fix.html',
watched: false,
served: true,
included: false
}
],
exclude: [
],
preprocessors: {
},
reporters: ['story'],
port: 9018,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome', 'Firefox', 'Safari'],
singleRun: true
在我的规范中,我从 describe()
开始用beforeEach()
运行以下两行:
jasmine.getFixtures().fixturesPath = '../';
jasmine.getFixtures().load('/karma/imagelist.fix.html');
然后 it()
功能启动。他们正在测试一个函数,该函数将事件监听器添加到某些 <img>
元素使用 document.getElementById()
.这就是 fixture 需要进来的地方,因为没有它 getElementById()
将返回 null
. (这是我遇到的问题。)
我在网上搜索了将近一整天,寻找可以尝试的东西,但除了 TypeError: document.getElementById(...) is null
之外,我似乎无法从 Karma 中得到任何东西。 .我已经尝试更改我的 Karama 配置,而不是空的,preprocessors
有"**/*.html": []
在其中禁用html2js
,但那什么也没做。我试过禁用 jasmine-jquery
并使用 html2js
相反,但几乎没有关于 karma-html2js-preprocessor
的任何文档,所以我什至不知道我是否正确使用它。 (这就是为什么我更倾向于 jasmine-jquery
的原因。)我就是想不通。
更新(10 月 3 日)
我找到了 this question on Stack Overflow并在那里尝试了答案,但它没有用——我仍然遇到了我一直看到的相同行为。我的karma.conf.js
与上面没有变化,但在我的spriteloader.spec.js
我将 Jasmine 调用更改为:
jasmine.getFixtures().fixturesPath = 'http://localhost:9019/base/karma/';
jasmine.getFixtures().load('imagelist.fix.html');
我也试过了,还是一样的结果:
jasmine.getFixtures().fixturesPath = 'http://localhost:9019/base/karma/';
jasmine.getFixtures().load('http://localhost:9019/base/karma/imagelist.fix.html');
然后我找到了this issue thread on GitHub并更改了 preprocessors
在karma.conf.js
对此:
preprocessors: {
'**/*.html': []
},
我将规范中的 Jasmine 调用更改为:
var fixtures = jasmine.getFixtures();
fixtures.fixturesPath = 'base/karma/';
fixtures.load('imagelist.fix.html');
这也导致了相同的行为:TypeError: document.getElementById(...) is null
我还找到了this post并尝试了其中概述的配置——除了添加 JASMINE
和 JASMINE_ADAPTER
到 files
节karma.conf.js
—但我仍然有同样的行为。
因为我有karma-jasmine-jquery
在本地安装,我指着 jasmine-jquery
像这样的脚本:
'node_modules/karma-jasmine-jquery/lib/jasmine-jquery.js'
我什至尝试完全放弃 Jasmine 调用,转而使用 AJAX 调用:
$('#fixture').remove();
$.ajax({
async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
dataType: 'html',
url: '../karma/imagelist.fix.html',
success: function(data) {
$('body').append($(data));
}
});
不过我还是得到了同样的结果。不确定我还能尝试什么。
更新(10 月 4 日)
我找到了 this question/answer on StackOverflow并尝试使用 html2js
进行设置根据那里的解决方案。我删除了 jasmine-jquery
来自 frameworks
我的部分 karma.conf.js
, 并添加了一个 plugins
看起来像这样的部分:
plugins: [
'karma-chrome-launcher',
'karma-firefox-launcher',
'karma-html2js-preprocessor',
'karma-jasmine',
'karma-safari-launcher',
'karma-story-reporter'
],
我也改变了我的 preprocessors
部分看起来像这样:
preprocessors: {
'**/*.html': ['html2js']
},
然后我更改了我的 beforeEach()
到以下内容:
beforeEach(function() {
var imagelist = __html__['../karma/imagelist.fix.html'];
document.body.appendChild(imagelist);
});
我仍然看到相同的 TypeError: document.getElementById(...) is null
, 不过。
最佳答案
如果您使用karma-jasmine-jquery
,您只需设置以下内容:
将其添加为框架 - frameworks: ['jasmine-jquery', 'jasmine']
将您的灯具作为模式包含在文件数组下 - { pattern: 'test/fixtures/*.html', included: false, served: true }
在您的测试套件中使用 base/
设置路径,例如 jasmine.getFixtures().fixturesPath = 'base/test/fixtures';
。
将 fixture 加载到您的测试规范中 - loadFixtures('index.html');
karma - Jasmine -jquery https://www.npmjs.com/package/karma-jasmine-jquery
karma 配置 http://karma-runner.github.io/0.12/config/files.html
较新版本的 Chrome 不允许 file://URI 读取其他 file://URI。实际上,jasmine-jquery 无法在某些版本的 Chrome 下正确加载固定装置。对此的替代是使用开关 --allow-file-access-from-files
运行 Chrome。 https://github.com/velesin/jasmine-jquery#cross-domain-policy-problems-under-chrome
关于javascript - fixture 不会在 Karma 中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153241/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!