2016-03-25 14 views
0

Ich bin fest mit dem Schreiben von Unit-Tests für meinen Code testen, die uAwg Versprechen verwendet. Ich versuchte pit Tests zu verwenden, hatte aber kein Glück bei der Herstellung von Tests für uAwg passieren, aber eingebettet Versprechen gut funktionieren:kann nicht uAwg Versprechen im Scherz

//jest.autoMockOff(); - even with this rsvp test is failing 
jest.unmock('rsvp'); 

import rsvp from 'rsvp'; 

describe('my rsvp tests',() => { 

    // this test fails 
    pit('testing rsvp promise',() => { 
    return new rsvp.Promise((resolve) => { 
     resolve("getting something"); 
    }).then(()=> { expect(1).toBe(1); }); 
    }); 

    // this test passes 
    pit('testing pure promise',() => { 
    return new Promise((resolve) => { 
     resolve("getting something"); 
    }).then(()=> { expect(1).toBe(1); }); 
    }); 
}); 

Relevante Details von meinem package.json:

"rsvp": "^3.2.1", 
"babelify": "^7.2.0", 
"babel-preset-es2015": "^6.6.0", 
"babel-preset-react": "^6.5.0", 
"babel-preset-stage-0": "^6.5.0", 
"babel-jest": "^9.0.0", 
"jest-cli": "*" 
... 
"scripts": { 
    "test": "jest" 
}, 

"jest": { 
    "unmockedModulePathPatterns": [ 
    "<rootDir>/node_modules/react", 
    "<rootDir>/node_modules/react-dom", 
    "<rootDir>/node_modules/react-addons-test-utils" 
    ] 
} 

.babelrc:

{ 
    "presets": ["es2015", "react", "stage-0"] 
} 

ich sehe zwei mögliche Abhilfen, aber ich mag keine von ihnen:

  1. Mock uAwg Versprechen von eingebetteten Versprechen verwenden. Nachteil: Komponententests werden ausführlicher, ich muss andere Funktionen wie rsvp.all vortäuschen, die ich nicht machen möchte.
  2. Migrate von RSVP eingebettet verspricht. Es ist möglich, aber ich benutze bereits eine Bibliothek, die abhängig von rsvp, die Ajax-Anfragen macht. Ich bin mir auch nicht sicher, ob eingebettete Versprechen alles ersetzen können, was rsvp bietet (wie etwa "alle" und die anderen Hilfsfunktionen).

Antwort

0

Ich fand eine Lösung - oder, besser gesagt, eine Abhilfe. Kurz gesagt: Es gibt keine Notwendigkeit, pit Methoden zu verwenden, können sie mit ‚es‘ ersetzt werden, aber vor der Fertigstellung alle Timer ausgeführt werden sollen, kann es durch den Aufruf jest.runAllTimers getan werden().

Es ist keine elegante Lösung, wie ich, warum uAwg Versprechen gegen keinen Grund sehen, sollen nicht auf ‚eingebettet‘ diejenigen im Scherz arbeiten, aber zumindest funktioniert es.

+0

Vielleicht sollten Sie einen Bug-Datei? – Laurent