2016-10-28 4 views
2

Я использую Aurelia с Webpack. На основе ESNext Skeleton Webpack.Загрузите плагин aurelia-validation во время модульных тестов Jasmine - с webpack

https://github.com/aurelia/skeleton-navigation/tree/master/skeleton-esnext-webpack

У меня есть некоторые простые JS классы модели, такие как:

import {ValidationRules} from 'aurelia-validation'; 

export class Address { 
    street = ''; 
} 

ValidationRules 
    .ensure('street').required() 
    .on(Address); 

Как только я запускаю Jasmine тесты (с помощью Кармы), а также с Wallaby, я получаю ошибку:

'Message: Did you forget to add ".plugin('aurelia-validation)" to your main.js?' 

OK - У меня нет main.js при запуске тестов, так как загрузить плагин?

Я пытался сделать что-то вроде этого - с помощью Aurelia-тестирования:

import {StageComponent} from 'aurelia-testing'; 
import {bootstrap} from 'aurelia-bootstrapper-webpack'; 

... 

let component; 

beforeEach(done => { 
    component = StageComponent 
    .withResources(); 

    component.bootstrap(aurelia => { 
    aurelia.use.plugin('aurelia-validation') 
    }); 
    done(); 
}); 

Но это не работает с Webpack - открытый вопрос с Aurelia-загрузчика-WebPack. Или, возможно, я делаю это неправильно.

Есть ли другой способ загрузить плагин проверки во время тестов? Или получить аурелию-тестирование, работающую с webpack?

На данный момент я полностью заблокирован от проведения каких-либо модульных тестов, если у меня есть плагин проверки или попытка использования тестирования aurelia.

+1

Вы решили это? – fracz

+0

проблема решена сейчас? –

+0

Еще не решил. Снова попытался. – Steve

ответ

1

У меня есть работа с использованием aurelia-cli и wallaby. Вы были очень близки, и я думаю, это еще более расстраивает. Секрет для меня заключается в том, что плагин проверки должен был сначала загрузиться с использованием метода beforeAll в файле spec, а затем тестируемой системы, созданной в методе beforeEach. Следующий файл спецификации работал для меня и разрешил сообщение: вы забыли добавить «.plugin ('aurelia-validation') к вашей ошибке main.js.

import { SourceSystemEntity } from '../../../src/entities/sourceSystemEntity'; 
import { StageComponent } from 'aurelia-testing'; 
import { bootstrap } from 'aurelia-bootstrapper'; 

describe('SourceSystem class',() => { 
    let component; 
    let sut: SourceSystemEntity; 

    beforeAll(done => { 
    component = StageComponent.withResources().inView('<div></div>').boundTo({}); 
    component.configure = (aurelia: Aurelia) => { 
     aurelia.use 
     .standardConfiguration() 
     .plugin('aurelia-validation'); 
    }; 
    component.create(bootstrap).then(() => { 
     done(); 
    }); 
    }); 

    afterAll(() => { 
    component.dispose(); 
    }); 

    beforeEach(() => { 
    sut = new SourceSystemEntity(); 
    }); 

    it('has Validation enabled',() => { 
    expect(sut.hasValidation()).toBeTruthy(); 
    }); 

}); 
+0

Я использовал Webpack, а не Aurelia CLI. Но все равно спасибо. – Steve

+0

В этом случае это не имеет значения. Загрузка плагина происходит в beforeAll(), который выполняется до того, как тестируемая система создается в методе beforeEach(). Если я прав, это должно быть как для aurelia-cli, так и для webpack. Я тоже получал то же самое. Забыл ли вы загрузить ошибку blah, blah, blah и теперь эта ошибка была решена. –

+0

Я думал, что проблема может быть в aurelia-cli, и все модули должны быть требовательны. Протестировано с помощью jspm, который должен определять тип модуля и, следовательно, не требует, чтобы все, что требовалось, соответствовало требованиям. Я не мог заставить его работать с jspm, используя этот подход, чтобы гипотеза была взорвана. Вызов проблемы с аурелией-тестированием, так как команде aurelia действительно нужно решить эту проблему. –

1

Из того, что я нашел, ValidationRules запускаются во время процесса импорта. Поскольку они не были помещены в настоящий класс. Что для меня работало - это поставить ValidationRules в конструктор или другой метод и вызвать их после запуска bootstrap. Все еще не зафиксировал функциональность валидации во время испытаний, но он позволяет запускать модульные тесты.

import {ValidationRules} from 'aurelia-validation'; 

export class Address { 
    street = ''; 

    constructor() { 
    ValidationRules 
     .ensure('street').required() 
     .on(Address); 
    } 
}