2016-05-02 32 views
7

Bir flux uygulamak için rxjs5 kullanan bir webapp projem var ve şu anda üzerinde yazma birimi testleri için çözümler arıyorum.Başka bir projenin içinde mermer testi rxjs5 yöntemini kullanma

Aslında, örneğin, içeride özel gözlenebilirlerini uyguladık:

function getActivityObservable(events, timeout) { 
    return Observable.create((observer) => { 
    const deb = debounce(() => observer.next(false), timeout || DEFAULT_TIMEOUT); 
    const sub = events.subscribe((e) => { 
     if (!e) { 
     deb.cancel(); 
     observer.next(false); 
     } else { 
     observer.next(true); 
     deb(e); 
     } 
    }); 

    return() => { 
     if (sub) sub.unsubscribe(); 
     if (deb) deb.cancel(); 
    }; 
    }).distinctUntilChanged(); 
} 

Ben marble testing way kullanarak test ve böyle bir şey yazmak istiyorum

(i rxjs deposundan numune örneği aldı)
describe("getActivityObservable",() => { 
    it("should debounce by selector observable",() => { 
     const e1 = hot("--a--bc--d----|"); 
     const e1subs = "^    !"; 
     const expected = "----a---c--d--|"; 

     expectObservable(e1.debounce(getTimerSelector(20))).toBe(expected); 
     expectSubscriptions(e1.subscriptions).toBe(e1subs); 
    }); 
    }); 

sorum şu:

mümkün hot gibi operatörleri ile (mermer test yöntemi kullanmak mı, cold ve benzeri ...) rxjs5 projesinin dışında. Bu güzel aracı projemde nasıl kullanacağımı anlamıyorum.

Yardımlarınız için teşekkür ederiz.

+1

Şu anda çok ergonomik değilsiniz. Temel olarak 'TestScheduler' örneğine ihtiyacınız vardır ve üzerinde 'createHotObservable' ve 'expectObservable 'yöntemlerinin ve materyallerinin tümü vardır. Ardından, bunu yapmak için programlayıcıda 'flush()' diyorsunuz. –

+0

Anlıyorum, teşekkürler. Şu anda gözlemlenebilirliği test etmek için bu yöntemi kullanmanızı tavsiye eder misiniz? Ya da gelecekte mermer testini ortaya çıkarmayı planlıyor musunuz? –

+0

kesinlikle bu yöntemi, şu anda gözlenebilirleri test etmek için kullanabilirsiniz, biz öyleyiz. Sadece henüz yapmak için çok ergonomik değil. –

cevap

3

Ben olarak yorum yapabilirsiniz: "çok ergonomik değil".

ben mocha kullanıyorum ve maymun it yama:

const isEqual = require('lodash.isequal'); 
const TestScheduler = require('rxjs/testing/TestScheduler').TestScheduler; 

const assertDeepEqualFrame = (actual, expected) => { 
    if (!isEqual(actual, expected)) { 
    throw new Error('Frames not equal!'); 
    } 
} 

const oit = global.it; 
global.it = function(description, cb, timeout) { 
    if (cb.length === 0) { 
    oit(description, function() { 
     global.rxTestScheduler = new TestScheduler(assertDeepEqualFrame); 
     cb(); 
     global.rxTestScheduler.flush(); 
    }); 
    } else { // async test 
    oit.apply(this, arguments); 
    } 
}; 

ben ngrx/store den ilham bir sürü alarak özellikle bu dosyayı var: https://github.com/ngrx/store/blob/master/spec/helpers/test-helper.ts

ve sonra ben gibi benim testi yazabilirsiniz:

it('should filter with an always-true predicate',() => { 
    const source = hot('-1--2--^-3-4-5-6--7-8--9--|'); 
    const expected =   '--3-4-5-6--7-8--9--|'; 
    const predicate =() => { return true; }; 

    expectObservable(source.filter(predicate)).toBe(expected); 
}); 

Düzenleme Sen c it numaralı maymun yamalarını şu şekilde görüyorum: https://github.com/tjoskar/ng2-lazyload-image/blob/5e1c64a3611530ce26857a566b2d76dff890a3c5/test/helpers/test-helper.ts

+0

Kesinlikle ihtiyacım olan şey. Teşekkürler. –