javascript - Jasmine typescript - problém s testovaním func vs let item=func
Snažím sa otestovať funkciu v Jasmine, ktorá je definovaná takto:
let main = new function() {
this.addIframe = () => {
try {
$("body").append("<iframe id='myiframe'> </iframe>");
return true;
} catch (err) {
dosomthing();
return false;
}
};
};
Potrebujem tento typ definície na neskoršie nastavenie špiónov a podobných vecí v testovacej sade. Ale momentálne som uviazol pri probléme pri pokuse o otestovanie návratového príkazu pomocou tohto kódu:
describe("Function AddIframe", ()=> {
it("should return true if opened iframe",()=>{
expect(addIframe()).toBe(true);
});
Problém je, že dostávam Undefined, teraz chápem, že je to kvôli tomu, ako funguje JS, s dvojkrokovým spustením.
Skúsil som presunúť to na definíciu function(){} ale potrebujem to pre môj iný test. Testoval som myšlienku vložiť to do objektu, ale stále sa zobrazuje undefined aj pri použití this.method.
Môže mi niekto povedať, čo mi tu chýba alebo ako môžem obísť tento problém?
Odpoveď č. 1
Metóda addIframe je definovaná na objekte main, pretože vytvárate novú inštanciu anonymnej konštruktorovej funkcie. Takže musíte použiť main.addIframe() miesto addIframe():
expect(main.addIframe()).toBe(true);
Tu je funkčný príklad: http://jsfiddle.net/bBL9P/508/
