angular काइमरी टेस्ट बीड के साथ टाइपमोक मॉक का उपयोग करना




unit-testing typescript (2)

अगर आप मुझे मेरी मजाकिया लाइब्रेरी के लिए एक बेशर्म प्लग की इजाजत देते हैं ... यहां बताया गया है कि यह कैसे ineeda साथ ineeda :

import { TestBed, async } from '@angular/core/testing';
import { ineeda } from 'ineeda';
import { Foo, FooService } from './foo.service';
import { BarComponent } from './bar.component';

describe('BarComponent', () => {
    let component: BarComponent;
        TestBed.configureTestingModule({
            declarations: [BarComponent],
            providers: [{ provide: FooService, useClass: ineeda.factory<FooService>() }]
        });
    }));

    beforeEach(() => {
        let fixture = TestBed.createComponent(BarComponent);
        component = fixture.componentInstance;
    });

    it('does something', () => {
        let fooService = TestBed.get(FooService);
        fooService.intercept({ Foo: () => 'FooBar!');

        expect(component.doFoo()).toEqual("FooBar!");
    });

});

मैंने निम्नानुसार एक FooService परिभाषित किया है

import {Injectable} from "@angular/core";
export interface Foo {
    Foo(): string;
}

@Injectable()
export class FooService implements Foo {
    Foo(): string {
        return "Fooey!";
    }
}

और इस तरह से BarComponent

import {Component} from "@angular/core";
import {FooService} from "./foo.service";

@Component({
    moduleId: 'module.id',
    template: '<h1>Bar Component</h1>'
})
export class BarComponent {
    constructor(private fooService: FooService) {}

    doFoo(): string {
        return(this.fooService.Foo());
    }
}

अब मैं अपने BarComponent का परीक्षण करना चाहता BarComponent और मैं TypeMoq का नकली करने के लिए TypeMoq का उपयोग करना चाहता FooService , इसलिए मैंने निम्नलिखित किया

import * as TypeMoq from 'typemoq';
import {Foo, FooService} from "./foo.service";
import {TestBed, async} from "@angular/core/testing";
import {BarComponent} from "./bar.component";

describe('BarComponent', () => {
    let component: BarComponent;
    let mockFooService: TypeMoq.IMock<Foo>;

    beforeEach(async(() => {
        mockFooService = TypeMoq.Mock.ofType<Foo>();
        TestBed.configureTestingModule({
            declarations: [BarComponent],
            providers: [{ provide: FooService, useValue: mockFooService.object}]
        });
    }));

    beforeEach(() => {
        let fixture = TestBed.createComponent(BarComponent);
        component = fixture.componentInstance;
    });

    it('does something', () => {
        mockFooService.setup(x => x.Foo()).returns(() => "FooBar!");
        expect(component.doFoo()).toEqual("FooBar!");
    });

});

हालांकि ऊपर चल रहे निम्नलिखित त्रुटि देता है

SyntaxError: Function arg string contains parenthesis
        at new Function (<anonymous>)
        at evalExpression (webpack:///~/@angular/compiler/@angular/compiler.es5.js:25431:25 <- config/karma-test-shim.js:59412:40)
        at jitStatements (webpack:///~/@angular/compiler/@angular/compiler.es5.js:25448:0 <- config/karma-test-shim.js:59429:12)
        at JitCompiler._compileModule (webpack:///~/@angular/compiler/@angular/compiler.es5.js:25658:0 <- config/karma-test-shim.js:59639:35)
        at createResult (webpack:///~/@angular/compiler/@angular/compiler.es5.js:25613:0 <- config/karma-test-shim.js:59594:106)
        at JitCompiler._compileModuleAndAllComponents (webpack:///~/@angular/compiler/@angular/compiler.es5.js:25616:0 <- config/karma-test-shim.js:59597:40)
        at JitCompiler.compileModuleAndAllComponentsSync (webpack:///~/@angular/compiler/@angular/compiler.es5.js:25559:0 <- config/karma-test-shim.js:59540:23)
        at TestingCompilerImpl.compileModuleAndAllComponentsSync (webpack:///~/@angular/compiler/@angular/compiler/testing.es5.js:475:0 <- config/karma-test-shim.js:68201:31)
        at TestBed._initIfNeeded (webpack:///~/@angular/core/@angular/core/testing.es5.js:705:0 <- config/karma-test-shim.js:21376:36)
        at TestBed.createComponent (webpack:///~/@angular/core/@angular/core/testing.es5.js:791:0 <- config/karma-test-shim.js:21462:14)
        at Function.TestBed.createComponent (webpack:///~/@angular/core/@angular/core/testing.es5.js:610:0 <- config/karma-test-shim.js:21281:29)
        at Object.<anonymous> (webpack:///src/app/auth/login/bar.component.spec.ts:19:30 <- config/karma-test-shim.js:99954:41)
        at ZoneDelegate.invoke (webpack:///~/zone.js/dist/zone.js:365:0 <- config/karma-test-shim.js:65763:26)
        at ProxyZoneSpec.onInvoke (webpack:///~/zone.js/dist/proxy.js:79:0 <- config/karma-test-shim.js:65294:39)
        at ZoneDelegate.invoke (webpack:///~/zone.js/dist/zone.js:364:0 <- config/karma-test-shim.js:65762:32)
        at Zone.run (webpack:///~/zone.js/dist/zone.js:125:0 <- config/karma-test-shim.js:65523:43)
        at Object.<anonymous> (webpack:///~/zone.js/dist/jasmine-patch.js:104:0 <- config/karma-test-shim.js:65010:34)
        at webpack:///~/@angular/core/@angular/core/testing.es5.js:96:0 <- config/karma-test-shim.js:20767:17
        at ZoneDelegate.invoke (webpack:///~/zone.js/dist/zone.js:365:0 <- config/karma-test-shim.js:65763:26)
        at AsyncTestZoneSpec.onInvoke (webpack:///~/zone.js/dist/async-test.js:49:0 <- config/karma-test-shim.js:64605:39)
        at ProxyZoneSpec.onInvoke (webpack:///~/zone.js/dist/proxy.js:76:0 <- config/karma-test-shim.js:65291:39)
        at ZoneDelegate.invoke (webpack:///~/zone.js/dist/zone.js:364:0 <- config/karma-test-shim.js:65762:32)
        at Zone.run (webpack:///~/zone.js/dist/zone.js:125:0 <- config/karma-test-shim.js:65523:43)
        at AsyncTestZoneSpec._finishCallback (webpack:///~/@angular/core/@angular/core/testing.es5.js:91:0 <- config/karma-test-shim.js:20762:25)
        at webpack:///~/zone.js/dist/async-test.js:38:0 <- config/karma-test-shim.js:64594:31
        at ZoneDelegate.invokeTask (webpack:///~/zone.js/dist/zone.js:398:0 <- config/karma-test-shim.js:65796:31)
        at Zone.runTask (webpack:///~/zone.js/dist/zone.js:165:0 <- config/karma-test-shim.js:65563:47)
        at ZoneTask.invoke (webpack:///~/zone.js/dist/zone.js:460:0 <- config/karma-test-shim.js:65858:38)
        at timer (webpack:///~/zone.js/dist/zone.js:1732:0 <- config/karma-test-shim.js:67130:29)

क्या TypeMoq का कोणीय TestBed का उपयोग करना संभव है और यदि ऐसा है तो आप इसे सही ढंग से कैसे करते हैं?


मैं भी इस पर चल रहा था, क्योंकि आप अपने प्रदाताओं को कैसे कर रहे हैं इसके कारण आ रहा है

परिवर्तन

प्रदाताओं: [[प्रदान करें: फूसेवा, उपयोग करेंगुण: मॉकफूसर्विज़िओबजेक्ट}]

सेवा मेरे

प्रदाताओं: [[प्रदान करें: फूसेवा, उपयोग करेंखाना: () => {वापसी मुखौटा FoService.object}}]

लौटने के लिए कारखाने के फ़ंक्शन का उपयोग करके मेरे लिए त्रुटियों से छुटकारा मिला। यदि आप useClass का उपयोग करते हैं, तो आपको param.map के बारे में कोई त्रुटि मिलेगी, फ़ंक्शन नहीं है, और यदि आप उपयोग करते हैं, तो आप अवांछित कोष्ठक के बारे में त्रुटि प्राप्त करते हैं। usefactory और सिर्फ एक इनलाइन फ़ंक्शन जो moq.object देता है, हालांकि काम करता है।