2017-10-03 3 views
1

カルマ/モカとチャイによるユニットテストでチャイプラグインを使用できるか、特別なカルマ互換プラグインに変換する必要がありますか?Kaia/Mocha/Chaiでchai-date-stringのようなChaiプラグインを使用するにはどうすればよいですか?

を使って、expect(requestBody.time).to.be.a.dateString();のようなことをしたいのですが、NPMモジュールとしてインストールし、テストファイルにそれらを必要とすることはありません。

karma-chai-plugins私は他のチャイプラグインを使用するように設計されていると思っていましたが(これはバンドルされている数を超えています)、NPMモジュールとして追加してから、Chaiプラグイン名をフレームワークリストが、これは機能しませんでした。

マイkarma.conf.jspackage.json

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['mocha', 'chai', 'chai-date-string', 'sinon-chai', 'browserify'], 
    client: { chai: { includeStack: true } }, 
    files: [ 'playmob.js', 'test/**/*_test.js' ], 
    preprocessors: { 
     'test/**/*.js': [ 'browserify' ] 
    }, 
    browserify: { 
     debug: true, 
    }, 
    exclude: [ ], 
    reporters: ['mocha', 'beep'], 
    mochaReporter: { ignoreSkipped: true }, 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    browsers: ['ChromeHeadless'], 
    singleRun: false, 
    concurrency: Infinity 
    }) 
} 

バージョン(私は明示的に依存関係の問題を回避するためにchai-as-promisedの新しいバージョンをインストールする必要がありました):次のエラーで

"devDependencies": { 
    "browserify": "^14.4.0", 
    "chai": "^4.1.2", 
    "chai-as-promised": "^7.1.1", 
    "chai-date-string": "^0.1.0", 
    "karma": "^1.7.1", 
    "karma-beep-reporter": "^0.1.4", 
    "karma-browserify": "^5.1.1", 
    "karma-chai-plugins": "^0.9.0", 
    "karma-chrome-launcher": "^2.2.0", 
    "karma-cli": "^1.0.1", 
    "karma-mocha": "^1.3.0", 
    "karma-mocha-reporter": "^2.2.4", 
    "karma-sinon-chai": "^1.3.2", 
    "mocha": "^3.5.3", 
    "sinon": "^2.4.1", 
    "sinon-chai": "^2.14.0", 
    "uglifyjs": "^2.4.11", 
    "url": "^0.11.0", 
    "watchify": "^3.9.0" 
    } 

結果:

> [email protected] test /Users/jschuur/Code/Playmob/js_api_lib 
> karma start 

/Users/jschuur/Code/Playmob/js_api_lib/node_modules/di/lib/injector.js:9 
     throw error('No provider for "' + name + '"!'); 
    ^

Error: No provider for "framework:chai-date-string"! (Resolving: framework:chai-date-string) 
    at error (/Users/jschuur/Code/Playmob/js_api_lib/node_modules/di/lib/injector.js:22:12) 

答えて

1

karma-chai-pluginsのコードを見てください。hardcoded plugin namesのシリーズがあります。 karma-chai-pluginsは、そのソースにハードコードされているChaiプラグインのみを認識するようです。だから私はchai-date-stringのためにそれを使用できるとは思わない。

さらに、chai-date-stringは、ブラウザにすぐにロード可能な形式では配布されません。 BrowserifyまたはWebpackを使用して、chaiDateStringのようなものをグローバルスペースにエクスポートするファイルに変換することができます。次に、あなたがする必要があるだろう:

  1. filesあなたの変換chai-date-stringスクリプトに含めます。

  2. chai.use(chaiDateString)を呼び出すfilesに別のスクリプトを追加します。レポに表示されているexample codeは、chai.useの呼び出しを省略しますが、省略することはできません。

+0

マイセットアップが既にbrowserify使用しており、実際に、私はどこかkarma.conf.js' 'でそれを設定せずに、別のテストでは、' url'モジュールを使用するので、私ははるかに確認されませんでしたセットアップが必要になります。 私はplaymob_test.jsファイルの先頭に 'chai.use(chaiDateString);'を追加してみました。また、 'node_modules/chai-date-string/index.jsを含むいくつかのバリエーション''私の 'ファイル'ブロックでは、運がありません。私はまだ同じエラーが発生します。 –

+1

あなたが 'frameworks'設定で' chai-date-string'を使っているために、同じ*エラーが発生した場合。そこからそれを削除する必要があります。 (これは私の最初の段落で暗示されていたのは、 'フレームワークに入ることを許可する唯一のものは'カルマチャイプラグインですが、あなたはそれを使うことができないからです。)そして、はい、私はbrowserifyを使っています。あなたのテストファイルに 'var chaiDateString = require(" chai-date-string ")'を使って、各テストファイルに 'chai.use(chaiDateString)'を置いておけば、既に設定したものを使うことができます。 – Louis

+1

しかし 'chai-date-string'をすべてのテストファイルで' require 'する必要なしに一度​​だけセットアップしたい場合は、 'karma.conf.js'にあるBrowserify設定に依存することはできません。テストファイルとは別に 'chai-date-string'を扱う必要があります。私はKarmaでBrowserifyを使用していないので、この 'karma.conf.js'の中で必要な設定を行うことができるかどうかはわかりません。 – Louis

関連する問題