Как это часто бывает, я в конце концов понял это ...
1. В функции beforeEach()
отсутствует runs()
Это должно быть
beforeEach(async () => {
await atom.packages.activatePackage('language-javascript');
await atom.workspace.open('sample.js');
runs(() => {
editor = atom.workspace.getActiveTextEditor();
editorView = atom.views.getView(editor);
return activationPromise = atom.packages.activatePackage('quick-fold');
});
});
, где функция runs()
возвращает обещание при активации пакета.
Начиная с документы :
Спецификации записываются путем определения набора блоков с вызовами на runs
, которые обычно заканчиваются асинхронным вызовом.
Я слишком устал сейчас, чтобы понять, что это значит, но это звучит правдоподобно.
2. Команды активации в package.json
должны основываться на atom-text-editor
То есть, а не atom-workspace
"activationCommands": {
"atom-text-editor": "quick-fold:fold-next"
},
Это, вероятно, потому что у нас есть atom.commands.dispatch(editorView, 'quick-fold:fold-next')
, куда команды отправляютсяeditorView = atom.views.getView(editor)
вместо рабочего пространства Atom.
Рефакторинг - «стандартный» способ сделать это
describe('QuickFold package', () => {
let editor, editorView, activationPromise;
const foldNext = async (callback) => {
atom.commands.dispatch(editorView, 'quick-fold:fold-next');
await activationPromise;
return callback();
};
beforeEach(async () => {
await atom.packages.activatePackage('language-javascript');
await atom.workspace.open('sample.js');
runs(() => {
editor = atom.workspace.getActiveTextEditor();
editorView = atom.views.getView(editor);
return activationPromise = atom.packages.activatePackage('quick-fold');
});
});
describe('when the specs are run', () => {
it('opens the sample file', () => expect(!editor.isEmpty()).toBe(true));
});
describe('when the quick-fold:fold-next event is triggered', () => {
it('activates the package', () => {
return foldNext(() => expect(atom.packages.isPackageActive('quick-fold')).toBe(true));
});
it('moves the cursor to a different line number', () => {
return foldNext(() => expect(editor.getCursorScreenPosition().row).not.toBe(0));
});
});
});