2016-08-20 19 views
-1

私はJSのユニットテストのためのAVAを使用して新たなんだと私はすぐに岩にヒット:AVAユニットテスト:使用一気-AVAは、グローバル関数をテストするための

私の状況は私が実行するように一気タスクを実行したいということですがAVAテストとテストファイルを見て、テストファイルで私はテストするコードを含むjsファイルを含める必要が書いた。

問題は、テストするコードのファイルがすべてのグローバル関数を持つ古いjsファイルなので、何とかAMDモジュールにシミングする必要がありますが、元のファイルを変更せずにこれを行う方法はありますか?

gulpfile.js

var gulp = require("gulp"); 
var ava = require("gulp-ava"); 

var srcUnitTestFiles = ["**/*.tests.js", "!node_modules/*.js"]; 

gulp.task("unit-tests-exec",() => 
    gulp.src(srcUnitTestFiles) 
     // gulp-ava needs filepaths so you can't have any plugins before it 
     .pipe(ava({ verbose: true })) 
); 

gulp.task("unit-tests-watch",() => 
    gulp.watch(srcUnitTestFiles, ["unit-tests-exec"]) 
); 

package.json

{ 
    "name": "name", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": { 
    "test": "ava" 
    }, 
    "author": "", 
    "license": "ISC", 
    "devDependencies": { 
    "ava": "^0.16.0", 
    "gulp": "^3.9.1", 
    "gulp-ava": "^0.14.0", 
    "jsdom": "^9.4.2" 
    }, 
    "ava": { 
    "require": [ 
     "./test/helpers/setup-browser-env.js" 
    ] 
    } 
} 

firstTest.tests.js

import test from "ava"; 

// I need to import the js file to test 

test.before(t => { 

}); 

test("foo", t => { 
    t.pass(); 
}); 

test('bar', async t => { 
    const bar = Promise.resolve('bar'); 

    t.is(await bar, 'bar'); 
}); 

ありがとう!

答えて

0

私はあなたがAMDではなくUMDを意味すると思います。 AMDは動作しません。

私はあなたが私たちのrecipe on browser testing with jsdomに従うことをお勧めします。

global.document = require('jsdom').jsdom('<body></body>'); 
global.window = document.defaultView; 
require('./your-lib'); 

そして、あなたはグローバルwindowにあなたのライブラリにアクセスすることができます:

あなたは先頭に次の操作を行うことができyourLibはあなたにwindowに接続する方法であることで

window.yourLib(); 

としょうかん。

+0

ありがとう、シンドル! 私はそのようにテストするファイルを要求することができますが、実際に私は私の状況をよく説明していないと思う: テストするファイルは、メソッドをWindowオブジェクトに添付しません。テストする必要がある単純な関数の数 このようなsmthはファイルの内容です:function Name(par){...}。だから私がテストするファイルを必要とすると私はそれが "Nameは定義されていません"参照エラーを返すテストする必要がある関数 "名前"を呼び出します。 私はファイルとしてシムをモジュールとして使用する必要があると思いますが、どうすればそのようなことができますか、その機能にアクセスできますか? ありがとう! –

+0

P.S:テストする必要がある関数をwindowプロパティ "window.tests"に追加してテストするために、jsファイルにコードを追加する問題を解決しました。これが最も簡単な解決策であれば、テスト目的でファイルのすべての "孤立した"関数をウィンドウオブジェクトに添付するgulpプラグインを持つことがいいでしょう:D私は –

関連する問題