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

时间:2016-10-28 18:26:05

标签: aurelia aurelia-validation

我正在使用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测试,我完全无法进行任何单元测试。

2 个答案:

答案 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);
  }
}