概要
- entry pointとなるモジュールをUnit Test用ファイルから呼び出したい
- requireをすると動作せず
- 詳細は末尾の
npm test
実行結果参照
環境
npm -v #v0.12.7
npm -v #2.11.3
cat package.json
{
"name": "karma-jasmine-webpack",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "./node_modules/karma/bin/karma start"
},
"author": "",
"license": "ISC",
"devDependencies": {
"jasmine-core": "^3.1.0",
"karma-webpack": "^1.8.1",
"webpack": "^1.13.2"
}
}
tree -L 2
.
├── index.html
├── karma.conf.js
├── node_modules
├── package.json
├── spec
│ └── indexSpec.js
├── src
│ ├── index.js
│ └── main.js
└── webpack.config.js
設定
vim karma.conf.js
+ var webpackConfig = require('./webpack.config.js');
preprocessors: {
+ 'spec/*.html': 'webpack'
},
+ webpack: webpackConfig,
touch webpack.config
module.exports = {
entry: "./src/index.js",
output: {
filename: "bundle.js"
}
};
実装
src/
cat src/index.js
var ClassA = require('./main.js');
(function () {
function methodC() {
//
}
function methodD() {
//
}
ClassA.namespace("space_B").method_CD = {
methodC: methodC,
methodD: methodD
};
}());
console.log(ClassA);
cat src/main.js
var ClassA = (function () {
function namespace(string) { //namespace関数
var object = this;
var levels = string.split('.')
for (var i = 0, l = levels.length; i < l; i++) {
if (typeof object[levels[i]] === 'undefined') {
object[levels[i]] = {};
}
object = object[levels[i]];
}
return object;
}
return {
namespace: namespace
};
}());
module.exports = ClassA;
(function () { //クラス名の追加、削除
var space_A = ClassA.namespace("space_A");
function methodA() {
//
}
function methodB() {
//
}
space_A.methodA = methodA;
space_A.methodB = methodB;
}());
spec/
cat spec/indexSpec.js
var ClassA = require('../src/main');
// require('../src/index');
describe('requireTest', function() {
it('karmaを利用し、require可能であること', function() {
expect(ClassA).toBe();
});
});
動作
node src/index.js
{ namespace: [Function: namespace],
space_A: { methodA: [Function: methodA], methodB: [Function: methodB] },
space_B: { method_CD: { methodC: [Function: methodC], methodD: [Function: methodD] } } }
npm test
PhantomJS 1.9.8 (Linux 0.0.0) requireTest karmaを利用し、require可能であること FAILED
Expected Object({ namespace: Function, space_A: Object({ methodA: Function, methodB: Function }) }) to be.
at <Jasmine>
ゴール
- spec/indexSpec.jsのコメントを外す
- src/main.jsが実行される
ClassA
にspace_A
とspace_B
が格納される- spec/indexSpec.jsにてClassA.methodC、またはClassB.methodDを呼び出す
手順
vim spec/indexSpec.js
- // require('../src/index');
+ require('../src/index');
npm test
動作
- src/index.jsをrequireで実行するとエラーになる
npm test
ERROR in ./spec/indexSpec.js
Module not found: Error: a dependency to an entry point is not allowed
@ ./spec/indexSpec.js 2:0-23
webpack: Failed to compile.
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.20%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる