-1
我是新使用AVA的JS單元測試,我馬上打石頭: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');
});
謝謝!
非常感謝Sindre! 我能夠要求文件以這種方式測試,但實際上我認爲我沒有很好地描述我的情況: 要測試的文件沒有將方法附加到Window對象,文件已滿需要測試的簡單函數。 像這樣的smth是文件的內容:function Name(par){...}。所以,如果我需要文件測試,並且我需要測試它的函數「名稱」,則返回參考錯誤「名稱未定義」。 我想我需要在文件上使用它作爲模塊的墊片,但我怎麼能做到這樣的功能oraccess? 非常感謝! –
P.S:我解決了將代碼添加到js文件以測試並附加到窗口屬性「window.tests」我需要測試的函數的問題。如果這是最直接的解決方案,那麼有一個gulp插件可以將文件的所有「孤立」功能附加到窗口對象以進行測試:D可以實現類似於 –