Próbuję przetestować obietnicę za pomocą polecenia Jest CLI, kod ten wykonuje się tak, jak powinien, gdy jest uruchamiany w przeglądarce. Jednak chcę zacząć pisać testy na to.Jak uzyskać obietnice do pracy przy użyciu Jest CLI?
class ListCollection {
constructor() {
this.items = new Array();
}
addItem(string) {
const addItemPromise = new Promise(
function (resolve, reject) {
// set up async getting like a XMLHttpRequest
setTimeout(() => {
this.items.push(string);
resolve(string);
}.bind(this), 2000);
}.bind(this)
);
return addItemPromise;
}
}
Obecnie staram się wykonać ten bardzo prosty test. Testuję pod numerem pit
zgodnie z documentation which links to jasmine-pit.
jest.dontMock('../collections');
import Collection from '../collections';
describe("Collection",() => {
let collection;
beforeEach(() => {
collection = new Collection();
});
describe("Adding an item",() => {
pit('Spec 1', function() {
return collection.addItem("Hello World").then(function (string) {
expect(string).toBe("Hello World");
});
});
});
})
Gdy uruchomię moich testów z babel-node ./node_modules/.bin/jest
, test nie powiedzie się powyżej z tym, jak to jest ślad stosu. W szczególności dostaję Promise is not defined
.
Rollos-Mac-Pro:react-boilerplate Rollo$ babel-node ./node_modules/.bin/jest
Using Jest CLI v0.4.0
FAIL app/collections/__tests__/collectionTests.js
ReferenceError: /Users/Rollo/react-boilerplate/app/collections/__tests__/collectionTests.js: /Users/Rollo/react-boilerplate/app/collections/collections.js: **Promise is not defined**
at ListCollection.addItem (/Users/Rollo/react-boilerplate/app/collections/collections.js:24:34)
at /Users/Rollo/react-boilerplate/app/collections/collections.js:48:12
at Object.runContentWithLocalBindings (/Users/Rollo/react-boilerplate/node_modules/jest-cli/src/lib/utils.js:361:17)
at Loader._execModule (/Users/Rollo/react-boilerplate/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:250:9)
at Loader.requireModule (/Users/Rollo/react-boilerplate/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:916:12)
at Loader.requireModuleOrMock (/Users/Rollo/react-boilerplate/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:937:17)
at /Users/Rollo/react-boilerplate/app/collections/__tests__/collectionTests.js:7:34
at Object.runContentWithLocalBindings (/Users/Rollo/react-boilerplate/node_modules/jest-cli/src/lib/utils.js:361:17)
at Loader._execModule (/Users/Rollo/react-boilerplate/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:250:9)
at Loader.requireModule (/Users/Rollo/react-boilerplate/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:916:12)
at jasmineTestRunner (/Users/Rollo/react-boilerplate/node_modules/jest-cli/src/jasmineTestRunner/jasmineTestRunner.js:242:16)
at /Users/Rollo/react-boilerplate/node_modules/jest-cli/src/TestRunner.js:371:12
at _fulfilled (/Users/Rollo/react-boilerplate/node_modules/jest-cli/node_modules/q/q.js:798:54)
at self.promiseDispatch.done (/Users/Rollo/react-boilerplate/node_modules/jest-cli/node_modules/q/q.js:827:30)
at Promise.promise.promiseDispatch (/Users/Rollo/react-boilerplate/node_modules/jest-cli/node_modules/q/q.js:760:13)
at /Users/Rollo/react-boilerplate/node_modules/jest-cli/node_modules/q/q.js:574:44
at flush (/Users/Rollo/react-boilerplate/node_modules/jest-cli/node_modules/q/q.js:108:17)
at /Users/Rollo/react-boilerplate/node_modules/jest-cli/src/lib/FakeTimers.js:325:7
at process._tickCallback (node.js:448:13)
Nie wiem, jak to naprawić. Wersja węzła, której używam, musi mieć wartość 0.10.x, w przeciwnym razie nie będę mógł uruchomić polecenia Jest-CLI. Ale wersja 0.10.x węzła nie ma obietnic. Nie rozumiem też, w jaki sposób Jest-CLI działa z moimi klasami ES6 i składnią, ale nie rozpoznaje obietnic.
Każdy pomysł, jak uzyskać obietnicę pracy w mojej konfiguracji?
EDIT
Dodałem es6-promise
PolyFill na szczycie mojej pliku testowego i oflagowane nie być wyśmiewany. Zapewnia to odpowiednią poprawkę.
jest.dontMock('es6-promise');
require('es6-promise').polyfill();
Modernizacja węzła pracował dla mnie. Węzeł w wersji 12.7 rozwiązał ten problem – singh1469