У меня есть несколько файлов javascript, которые определяют вспомогательные классы, которые используются на некоторых из моих страниц, которые используют Angular для взаимодействия с пользователем.Я просто требую эти файлы в манифесте для контроллеров, которые в них нуждаются, и все они работают нормально.
Проблема заключается в попытке протестировать эти классы с использованием Jasmine.Мои тесты Jasmine генерировали ошибки типа, пока я не поместил ключевое слово «export» перед определениями классов javascript в этих файлах.Тогда тесты работали нормально, но на веб-страницах, использующих эти классы, возникла бы синтаксическая ошибка при обнаружении ключевого слова экспорта.
Классы javascript довольно просты, всего два определения класса ES6, подобных этому;
class ProjectBudget {
constructor() {
this._map = new Map();
this._total = 0;
this._postedTotal = 0;
}
load(rowObject) {
[...]
}
//other methods
}
class ProjectBudgetItem {
constructor(id, name, amount, parent, hasBudgetDetail = false) {
this._accountId = id;
this._accountName = name;
this._rowState = "loaded";
}
//various methods
}
Тест выглядит следующим образом:
import {ProjectBudget, ProjectBudgetItem} from "../../app/assets/javascripts/budgeting_scripts/project_budget_classes.js"
describe("ProjectBudgets", () => {
it("can create a projectBudget", () => {
// expect(foo).toEqual("Foo");
let pb = new ProjectBudget();
expect(pb.dirty).toEqual(false);
let obj={accountId: 3, name: "Carpenters", budgetAmount: 1000, hasDetailedbudget: false}
pb.load(obj)
expect(pb.total).toEqual(1000);
})
});
Единственный способ запустить тест - это изменить 'class ProjectBudget' на 'export class ProjectBudget', в противном случае я получаю ошибку, подобную этой:
FAILED TESTS:
ProjectBudgets
✖ can create a projectBudget
Chrome 70.0.3538 (Mac OS X 10.13.6)
TypeError: o.ProjectBudget is not a constructor
at <Jasmine>
at UserContext.<anonymous> (webpack:///spec/javascripts/budget_spec.js:7:17 <- spec/javascripts/budget_spec-2f776bfad8fdb52497f7.js:1:711)
at <Jasmine>
К сожалению, когда я делаю это, когда мое приложение загружает веб-страницу, которая использует эти классы, браузер выдает синтаксическую ошибку в слове "export".
Не уверен, какразрешить этот конфликт.