テストを Karma で実行できるように近づいていますが、最後のステップ (と思います) が不足しており、chai-jquery
動作するようになりました。2 つの異なるプラグインを試しましたhttps://www.npmjs.com/package/karma- chai-jqueryおよびhttps://www.npmjs.com/package/karma-jquery-chaiは、さまざまな github の問題または readme ファイルで設定された指定された順序に従った後でも、成功しませんでした。
これは私のtests-main.js
ファイルです
var allTestFiles = [];
var TEST_REGEXP = /(spec|test)\.js$/i;
Object.keys(window.__karma__.files).forEach(function(file) {
if (TEST_REGEXP.test(file)) {
// Normalize paths to RequireJS module names.
allTestFiles.push(file);
}
});
require.config({
baseUrl: '/base',
paths: {
'chai': 'node_modules/chai/chai',
'chai-jquery': 'node_modules/chai-jquery/chai-jquery',
'jquery': '//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery',
'underscore': '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min',
'sn/sn-underscore': 'static/scripts/sn/sn-underscore',
'vendor/jquery-ui': '//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min'
},
deps: allTestFiles,
callback: window.__karma__.start
});
これは私のものですkarma.conf.js
(重要でないオプションまたはデフォルトのオプションをすべて削除しました)
// Karma configuration
module.exports = function(config) {
config.set({
basePath: '',
// Can't use chai in here for whatever reason
frameworks: ['mocha', 'requirejs'],
files: [
'static/scripts-test/test-main.js',
{pattern: 'node_modules/chai/chai.js', included: true},
{pattern: 'static/scripts-test/**/*.js', included: false},
{pattern: 'static/scripts/sn/**/*.js', included: false}
],
exclude: [
'static/scripts/global.js'
],
browsers: ['PhantomJS']
});
};
これは「機能する」仕様ファイルです。gets と への参照を正しく使用していますがchai
、jquery
ロードchai-jquery
は毎回失敗します。
define([
'chai',
'jquery',
'static/scripts/sn/widgets/dismissable'
], function(chai, $) {
chai.should();
chai.expect();
describe('Dismissable', function() {
var $el = $('</p>'),
closeBtnSel = '.js-dismissable-close-btn';
beforeEach(function() {
$('body').append('<div id="fixtures"></div>');
$el.appendTo('#fixtures').dismissable({closeFn: 'hide'});
});
afterEach(function() {
$el.remove();
});
it('should correctly create the HTML', function() {
$(closeBtnSel).should.exist;
$el.should.have.class('dismissable');
});
});
});
私が得るエラーは次のとおりです。
TypeError: 'undefined' is not an object (evaluating '$(closeBtnSel).should.exist')
これは私のディレクトリ構造です:
- static/
- scripts/
- scripts-test/
- test-main.js
- node_modules/
- karma.conf.js
そして最後に、私のpackage.json
{
"devDependencies": {
"chai": "^2.3.0",
"chai-jquery": "^2.0.0",
"jquery": "^2.1.4",
"karma-chai": "^0.1.0",
"karma-mocha": "^0.1.10",
"karma-requirejs": "*",
"mocha": "^2.2.5",
"requirejs": "^2.1.18",
"should": "^6.0.1"
}
}
私が通常得るエラーのいくつか:
でフレームワークの順序を変更する場合karma.conf
throw error('No provider for "' + name + '"!');
^
Error: No provider for "framework:chai"! (Resolving: framework:chai)
プラグインをインストールしても
時々私はこのようなものを得るでしょう:
Error: Mismatched anonymous define() module: function ($) {
return function (chai, utils) {
return chaiJquery(chai, utils, $);
};
}
ここで何か助けていただければ幸いです。これについて頭を悩ませることはできません。
編集: Louis からの推奨に基づく小さな変更