質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.76%

  • JavaScript

    15304questions

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

  • webpack

    210questions

  • Karma

    8questions

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

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 178

IST

score 3

 概要

  • 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で質問しよう!

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JavaScript

    15304questions

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

  • webpack

    210questions

  • Karma

    8questions

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