Я пытаюсь написать модульные тесты для нашей небольшой, но скоро растущей библиотеки бизнес-функций testcafe - то есть библиотек, которые используют файлы подкачки, чтобы протестировать любую непростую логику.
С этой целью я пытаюсь написать свой первый модульный тест для этой функции.
entityTabs - это импортированный асинхронный модуль, пользовательский интерфейс - импортированный неасинхронный модуль, accountAssignmentControls - файл подкачки. Те функции, упомянутые этим. определены далее в модуле.
t - импорт тест-кафе.
Первоначально я хочу отключить все функции и проверить, что statAccountAssignments вызывается один раз (после этого я буду тестировать различные комбинации данных, которые передаются, но я не могу преодолеть первое препятствие).
I UNIT проверил нашу не-асинхронную библиотеку безголовых тестов, но
- а) не асинхронный и
- б) это был более старый узел, поэтому некоторые структуры и т. Д. Отличаются.
Один из разработчиков добавил некоторые модульные тесты, используя стул, мокко и синон - но они были для не асинхронных частей проекта (в основном, для обработки файлов), поэтому я не могу получить то, что он написал, для применения.
FUT
async assignAccounts(assignments) {
await entityTabs.startAccountAssignment();
ui.logWithTimeStamp('WAiting for Account assignment dialog to appear', 2);
await t
.expect(accountAssignmentControls.accountAssignmentHeader.innerText)
.contains('Account Assignment', 'Header contains Account Assignment');
ui.logWithTimeStamp('Header visible waiting for accounts list', 2);
await this.checkAccountList();
const assignmentsCount = assignments.length;
ui.logWithTimeStamp('Doing ' + assignmentsCount + ' assignments: ', 1);
for (let i=0; i<assignmentsCount; i++) {
ui.logWithTimeStamp(i + ': ' + JSON.stringify(assignments[i]), 1);
if (assignments[i].type === 'credit') {
await this.assignCreditAccount(assignments[i]);
} else if (assignments[i].type === 'debit') {
await this.assignDebitAccount(assignments[i]);
} else {
await this.assignFullAccount(assignments[i]);
}
ui.logWithTimeStamp('Assignment done', 3);
await t.takeScreenshot();
};
}
текущий тест на провал
import chai from 'chai';
import sinon from 'sinon';
import sinonChai from 'sinon-chai';
import AccountAssignment from '../../business-functions/account-assignment';
let accountAssignmentControls;
// let busyLoader;
let entityTabs;
let ui;
let t;
// Register the sinon-chai extensions.
chai.use(sinonChai);
const expect = chai.expect;
// We must turn off the no-invalid-this rule because of how mocha uses this to be the current test fixture.
/* eslint no-invalid-this: "off" */
describe('business-functions - Account assignment', function() {
describe('AccountAssignment class', function() {
describe('assignAccounts', function() {
let sandbox;
before(() => {
sandbox = sinon.sandbox.create();
});
after(() => {
sandbox.restore();
});
describe('when one of each assignment', function() {
it('starts assignment', async function() {
const fakeResponse = 'dont care';
const accountAssignment = new AccountAssignment();
t = sinon.stub();
entityTabs = sinon.stub();
ui = sinon.stub();
ui.logWithTimeStamp = sinon.stub();
accountAssignmentControls = sinon.stub();
// let f = sinon.fake();
let startAccountAssignment = sandbox
.stub(entityTabs, 'startAccountAssignment')
.resolves(fakeResponse);
// sandbox.stub(t, 'expect');
sandbox
.stub(accountAssignment, 'checkAccountList')
.resolves(fakeResponse);
sandbox
.stub(accountAssignment, 'assignCreditAccount')
.resolves(fakeResponse);
sandbox
.stub(accountAssignment, 'assignDebitAccount')
.resolves(fakeResponse);
sandbox
.stub(accountAssignment, 'assignFullAccount')
.resolves(fakeResponse);
sandbox
.stub(accountAssignmentControls, 'accountAssignmentHeader')
.resolves(fakeResponse);
sandbox
.stub(t, 'expect')
.resolves(fakeResponse);
sandbox
.stub(t, 'contains')
.resolves(fakeResponse);
sandbox
.stub(t, 'takeScreenshot')
.resolves(fakeResponse);
await accountAssignment.assignAccounts({});
expect(startAccountAssignment).to.be.callledOnce;
});
});
});
});
});
который при запуске получает
TypeError: Невозможно заглушить несуществующее собственное свойство startAccountAssignment
в Sandbox.stub (node_modules \ sinon \ lib \ sinon \ sandbox.js: 286: 19)
в Context._callee $ (C: /Projects/Platform/PlatformTesting/UITests-NotProtractor/unit-tests/business-functions/account-assignment.tests.js: 49: 14)
в tryCatch (node_modules \ регенератор-время выполнения \ runtime.js: 65: 40)
в Generator.invoke [как _invoke] (node_modules \ регенератор-время выполнения \ runtime.js: 303: 22)
в Generator.prototype. (анонимная функция) [как далее] (node_modules \ регенератор-время выполнения \ runtime.js: 117: 21)
на этапе (юнит-тесты \ бизнес-функции \ account-assignment.tests.js: 21: 191)
в C: \ Projects \ Platform \ PlatformTesting \ UITests-NotProtractor \ unit-tests \ business-functions \ account-assignment.tests.js: 21: 437
на новом Promise ()
в контексте. (Блок-тесты \ бизнес-функция \ счет-assignment.tests.js: 21: 99)