我设置了几个测试来查看jquery是否正在返回我的HTML对象。我的karma.conf文件如何拉入html文件似乎有些不对劲。
我尝试使用karma.conf.js中引用的JS文件中的变量,它们在测试中都能正常工作。
karma.conf.js
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
// list of files / patterns to load in the browser, order matters
files: [
'./js/jquery.min.js',
'./*.js',
{pattern: './*.html'},
{pattern: './pages/*.html'},
{pattern: './js/*.js'},
{pattern: './js/pages/*.js'},
{pattern: './test/pages/*Spec.js'},
{pattern: './test/*Spec.js'},
],
// preprocess matching files before serving them to the browser
preprocessors: {
'./js/pages/*.js': 'coverage',
'./js/main.js': 'coverage',
},
// test results reporter to use
reporters: [
'progress',
'coverage'
],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
// start these browsers
browsers: ['Chrome_without_sandbox'],
customLaunchers: {
Chrome_without_sandbox: {
base: 'Chrome',
flags: [
'--no-sandbox',
'--headless',
'--disable-gpu',
'--remote-debugging-port=9222'
] // without thisit fails under Docker
}
},
// if true, Karma captures browsers, runs the tests and exits
singleRun: true,
// how many browser should be started simultaneous
concurrency: Infinity,
plugins: [
'karma-coverage',
'karma-chrome-launcher',
'karma-jasmine',
],
coverageReporter: {
type : 'html',
dir : 'coverage/'
},
// proxy for AJAX requests
proxies: {
'': 'http://localhost'
},
});
};
main.html的片段
<label class="inline">PORT 4:</label>
<input id="portFour" type="checkbox" data-toggle="toggle" data-size="small" data-width="86" data-on="Enabled" data-off="Disabled" data-onstyle="success" data-offstyle="danger">
mainSpec.js
describe("see if it's checked", function () {
it('should be checked', function() {
expect($("#portFour").prop("checked")).toBe(true);
});
});
describe("see if it exists", function () {
it('should be true', function() {
expect($("#portFour").length > 0).toBe(true);
});
});
describe('see if it's defined', function() {
it('should be defined', function() {
expect($("#portFour")).toBeDefined();
});
});
前两个断言失败(结果分别是未定义和错误),但最后一个断言通过。如何让它正确引用html元素?
答案 0 :(得分:1)
修改/更新强>
好的,所以在与你评论并再多思考之后,我正在扩大我的答案。
我认为问题部分是由于测试类型之间的混淆。 Karma是一个主要用于单元测试的测试运行器。但是,您想要运行的测试类型(检查页面上可见的元素,或者是否选中了复选框)听起来更像是&#34; Acceptance&#34;或者&#34;端到端&#34;测试,从用户的角度测试网页或应用程序。
单位VS验收测试
我建议你放弃Karma,并使用其他一些为这些测试而构建的工具。具体来说,您需要这些工具进行验收测试(对于某些测试会有替代方案):
为了帮助说明这一点,我构建了一个小型JSFiddle,它使用Jasmine并对HTML代码运行验收测试,并在jQuery与其他文件(2个)一起加载到页面后打印结果测试然后通过)。
<强> HTML 强>
<label class="inline">PORT 4:</label>
<input id="portFour" type="checkbox" data-toggle="toggle" data-size="small" data-width="86" data-on="Enabled" data-off="Disabled" data-onstyle="success" data-offstyle="danger">
<强> JS 强>
describe('a suite', function() {
it('is a spec', function() {
expect(true).toEqual(true);
});
});
describe("The Checkbox", function () {
it('should be checked', function() {
expect($("#portFour").prop("checked")).toBe(true);
});
it('should be visible', function() {
expect($("#portFour").length > 0).toBe(true);
});
it('can be defined by jQuery', function() {
expect( $("#portFour") ).toBeDefined();
});
});