Тестирование Rails 5 с Jasmine - «класс экспорта» требуется для тестов Jasmine, но ломает мои страницы - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть несколько файлов 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".

Не уверен, какразрешить этот конфликт.

1 Ответ

0 голосов
/ 27 ноября 2018

Решением в этом случае было исключение оператора импорта и включение нужных мне скриптов (без ключевого слова «export») под ключом «files» в karma.conf.js.Возможно, не лучшее решение, так как было бы неплохо иметь возможность указать в тесте, какие файлы загружать, а не в файле конфигурации, но, по крайней мере, это сработало.

...