概要
- entry pointとなるモジュールをUnit Test用ファイルから呼び出したい
- requireをすると動作せず
- 詳細は末尾の
npm test
実行結果参照
- 詳細は末尾の
環境
bash
1npm -v #v0.12.7 2npm -v #2.11.3
bash
1cat package.json
json
1{ 2 "name": "karma-jasmine-webpack", 3 "version": "1.0.0", 4 "description": "", 5 "main": "index.js", 6 "scripts": { 7 "test": "./node_modules/karma/bin/karma start" 8 }, 9 "author": "", 10 "license": "ISC", 11 "devDependencies": { 12 "jasmine-core": "^3.1.0", 13 "karma-webpack": "^1.8.1", 14 "webpack": "^1.13.2" 15 } 16}
bash
1tree -L 2
text
1. 2├── index.html 3├── karma.conf.js 4├── node_modules 5├── package.json 6├── spec 7│ └── indexSpec.js 8├── src 9│ ├── index.js 10│ └── main.js 11└── webpack.config.js
設定
bash
1vim karma.conf.js
diff
1+ var webpackConfig = require('./webpack.config.js'); 2 3 preprocessors: { 4+ 'spec/*.html': 'webpack' 5 }, 6+ webpack: webpackConfig,
bash
1touch webpack.config
javascript
1module.exports = { 2 entry: "./src/index.js", 3 output: { 4 filename: "bundle.js" 5 } 6};
実装
src/
bash
1cat src/index.js
javascript
1var ClassA = require('./main.js'); 2 3(function () { 4 function methodC() { 5 // 6 } 7 function methodD() { 8 // 9 } 10 ClassA.namespace("space_B").method_CD = { 11 methodC: methodC, 12 methodD: methodD 13 }; 14}()); 15console.log(ClassA);
bash
1cat src/main.js
javascript
1var ClassA = (function () { 2 function namespace(string) { //namespace関数 3 var object = this; 4 var levels = string.split('.') 5 for (var i = 0, l = levels.length; i < l; i++) { 6 if (typeof object[levels[i]] === 'undefined') { 7 object[levels[i]] = {}; 8 } 9 object = object[levels[i]]; 10 } 11 return object; 12 } 13 return { 14 namespace: namespace 15 }; 16}()); 17module.exports = ClassA; 18 19(function () { //クラス名の追加、削除 20 var space_A = ClassA.namespace("space_A"); 21 function methodA() { 22 // 23 } 24 function methodB() { 25 // 26 } 27 space_A.methodA = methodA; 28 space_A.methodB = methodB; 29}());
spec/
bash
1cat spec/indexSpec.js
javascript
1var ClassA = require('../src/main'); 2// require('../src/index'); 3describe('requireTest', function() { 4 it('karmaを利用し、require可能であること', function() { 5 expect(ClassA).toBe(); 6 }); 7});
動作
bash
1node src/index.js
text
1{ namespace: [Function: namespace], 2 space_A: { methodA: [Function: methodA], methodB: [Function: methodB] }, 3 space_B: { method_CD: { methodC: [Function: methodC], methodD: [Function: methodD] } } }
bash
1npm test
text
1PhantomJS 1.9.8 (Linux 0.0.0) requireTest karmaを利用し、require可能であること FAILED 2 Expected Object({ namespace: Function, space_A: Object({ methodA: Function, methodB: Function }) }) to be. 3 at <Jasmine>
ゴール
- spec/indexSpec.jsのコメントを外す
- src/main.jsが実行される
ClassA
にspace_A
とspace_B
が格納される- spec/indexSpec.jsにてClassA.methodC、またはClassB.methodDを呼び出す
手順
bash
1vim spec/indexSpec.js
diff
1- // require('../src/index'); 2+ require('../src/index');
bash
1npm test
動作
- src/index.jsをrequireで実行するとエラーになる
bash
1npm test
text
1ERROR in ./spec/indexSpec.js 2Module not found: Error: a dependency to an entry point is not allowed 3 @ ./spec/indexSpec.js 2:0-23 4webpack: Failed to compile.
あなたの回答
tips
プレビュー