🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Karma

Karma(元Testacular)は、node.jsベースのJavaScriptテストランナー。AngularJSのテストフレームワークとして開発されたもので、クライアントサイドのJavaScriptコードのテストを容易に実行できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

666閲覧

外部ファイルをrequireで読込(実行)したい

IST

総合スコア14

Karma

Karma(元Testacular)は、node.jsベースのJavaScriptテストランナー。AngularJSのテストフレームワークとして開発されたもので、クライアントサイドのJavaScriptコードのテストを容易に実行できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/05/10 13:58

編集2018/05/10 14:52

概要

  • 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が実行される
  • ClassAspace_Aspace_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.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問