2016-10-28 10 views
2

ウェブパックでAureliaを使用しています。 ESNext Skeleton Webpackに基づいています。ジャスミンユニットテスト中にaurelia-validationプラグインをロードする - 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); 

を、私はエラーを取得:

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

OK - テストを実行するときにmain.jsがないので、プラグインをロードする方法は?

私はこのような何かをやってみました - オーレリア・テストを使用して:

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のでは動作しません - アウレリア - ブートストラップ・WebPACKのオープンの問題を。あるいは、私はそれを間違ってやっているかもしれません。

テスト中に検証プラグインを読み込む他の方法はありますか?または、Webpackで作業するaurelia-testingを取得しますか?

現時点では、私はバリデーション・プラグインを持っているか、またはaurelia-testingを使用しようとすると、ユニット・テストを完全にブロックしています。

+1

解決しましたか? – fracz

+0

は今解決された問題ですか? –

+0

まだ解決されていません。試してみてください。 – Steve

答えて

1

私はaurelia-cliとwallabyを使って作業しています。あなたは非常に近く、私はそれがさらにイライラさせていると思います。私の秘密は、検証プラグインをまずブートストラップしてから、specファイルのbeforeAllメソッドを実行し、次にbeforeEachメソッドで作成したテスト対象システムを作成する必要があったということです。以下のスペックファイルが私のために働いてメッセージを解決しました:あなたのmain.jsに ".plugin( 'aurelia-validation')を追加するのを忘れましたか?

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

私はAurelia CLIではなくWebpackを使用していました。とにかくありがとう。 – Steve

+0

この場合、問題ではありません。プラグインの読み込みは、beforeEach()メソッドでテスト対象システムがインスタンス化される前に実行されるbeforeAll()で行われます。私が正しいとすれば、これはaurelia-cliとwebpackの両方の場合に当てはまるはずです。私も同じようになっていました。あなたはblah、blah、blahのエラーを読み込むのを忘れましたが、今度はエラーが解決されました。 –

+0

私は問題がaurelia-cliである可能性があり、すべてのモジュールが要件に準拠していなければならないと考えていました。 jspmでテストされます.jspmはどのタイプのモジュールを検出する必要があり、したがってすべてがrequirejsに準拠している必要はありません。私はこのアプローチを使ってjspmで動作させることができなかったので、仮説が吹かれました。 aureliaチームが実際にこれに対処する必要があるので、aurelia-testingの問題を提起する。 –

1

ValidationRulesは、インポート処理中に実行されています。彼らは実際のクラスに入れられていないので。私にとっては、ValidationRulesをコンストラクタまたは別のメソッドに入れ、ブートストラップが実行された後に呼び出すことでした。まだテスト中に検証の機能を修正していませんが、ユニットテストを実行できるようにしました

import {ValidationRules} from 'aurelia-validation'; 

export class Address { 
    street = ''; 

    constructor() { 
    ValidationRules 
     .ensure('street').required() 
     .on(Address); 
    } 
} 
関連する問題