在Jasmine单元测试期间加载aurelia-validation插件-使用webpack



我使用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?'

OK -我没有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中不起作用- open issue with aurelia-bootstrapper-webpack。也许我做错了。

是否有其他方法在测试期间加载验证插件?或者使用webpack进行aurelia测试?

目前,如果我有验证插件,或者尝试使用aurelia-testing,我完全无法进行任何单元测试。

我使用aurelia-cli和wallaby使其工作。你很接近了,我想这更让人沮丧。对我来说,秘密是验证插件必须首先使用规范文件中的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();
  });
});

我发现ValidationRules是在导入过程中运行的。因为他们还没有被放到实际的课堂上。对我来说有效的是将ValidationRules放入构造函数或另一个方法中,并在引导运行后调用它们。仍然没有修复测试期间的验证功能,但它确实允许您运行单元测试

import {ValidationRules} from 'aurelia-validation';
export class Address {
  street = '';  
  constructor() {
    ValidationRules
      .ensure('street').required()
      .on(Address);
  }
}

最新更新