AVA Unit Test: используйте gulp-ava для тестирования глобальных функций

Я новичок в использовании AVA для модульных тестов JS, и я сразу же попал в камень:

Моя ситуация заключается в том, что я хочу запустить задачу gulp для запуска тестов 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');
});

Спасибо!

1 ответ

Я думаю, что вы имеете в виду UMD, а не AMD. AMD не будет работать.

Я предлагаю вам следовать нашему рецепту по тестированию браузера сjsdom,

Вы могли бы сделать следующее в верхней части:

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

И тогда вы можете получить доступ к вашей библиотеке на window Глобальный:

window.yourLib();

С yourLib будучи методом, к которому вы привязаны window в вашей библиотеке.

Другие вопросы по тегам