Сбросить модуль ES6 с помощью SystemJS (для модульных тестов)?

Наш рабочий процесс включает в себя использование модулей ES6. Это также включает в себя модульные тесты. Мы тестируем import модулей. Проблема в том, что первоначальные авторы решили, что каждый модуль должен возвращать объекты, и поэтому у нас есть глобальные синглтоны (из-за того, как работает импорт ES6) по всей кодовой базе — классическая проблема модульного тестирования.

Есть ли способ «сбросить» указанные модули с помощью SystemJS после каждого теста?

образец модульного теста (загруженный karma-systemjs):

import MUT from './Mut' // module under test

describe('MUT', () => {

   it('should do stuff', () => {

      MUT.value = 'foo'
   })

   it('should do more stuff', () => {

      // value should not be 'foo' here. How do you reset MUT?
   })

person U Avalos    schedule 21.01.2016    source источник


Ответы (1)


Ознакомьтесь с этой проблемой на Github, и особенно этот комментарий.

Попробуйте удалить, а затем повторно импортировать модуль в блок beforeEach следующим образом:

describe('MUT', () => {

  let MUT;

  beforeEach((done) => {
    // remove the previous version
    System.delete(System.normalizeSync('./Mut'))
    // re-import the module
    System.import('./Mut').then((imported) => {
      MUT = imported
    }).then(done, fail)
  })

  it('should do stuff, () => {
    MUT.value = 'foo'
    expect(MUT.value).toBe('foo')
  })

  it('should do more stuff', () => {
    expect(MUT.value).not.toBe('foo')
  })

})
person jshanley    schedule 11.02.2016
comment
да, я думаю, мы пробовали это. Проблема в том, что зависимости Mut также необходимо перезагрузить. - person U Avalos; 13.03.2016