我正在使用Aurelia和Webpack。基于ESNext Skeleton 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测试(通过Karma)和Wallaby,我就会收到错误:
'Message: Did you forget to add ".plugin('aurelia-validation)" to your main.js?'
好的 - 运行测试时我没有main.js,那么如何加载插件?
我尝试过这样的事情 - 使用aurelia-testing:
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-bootstrapper-webpack的问题。或许我做错了。
在测试期间是否还有其他方法可以加载验证插件?或者使用webpack进行aurelia测试?
目前,如果我有验证插件,或者尝试使用aurelia测试,我完全无法进行任何单元测试。
答案 0 :(得分:2)
我使用aurelia-cli和小袋鼠工作。你非常接近我认为让它更令人沮丧。我的秘诀是验证插件必须首先使用spec文件中的beforeAll方法进行引导,然后在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();
});
});
答案 1 :(得分:1)
从我发现的导入过程中运行ValidationRules。因为他们还没有进入实际班级。对我有用的是将ValidationRules放入构造函数或其他方法中,并在引导程序运行后调用它们。在测试期间仍未修复验证功能,但它确实允许您运行单元测试
import {ValidationRules} from 'aurelia-validation';
export class Address {
street = '';
constructor() {
ValidationRules
.ensure('street').required()
.on(Address);
}
}