Async await Getting TypeError:在存根异步方法时无法存根不存在的own属性
我正在尝试为我们的testcafe业务函数库编写单元测试,这些函数库很小,但很快就会发展起来,即使用页面文件测试任何非简单逻辑的函数库 为此,我试图为这个函数编写我的第一个单元测试 entityTabs-是一个导入的异步模块,ui是一个导入的非异步模块,accountAssignmentControls是一个页面文件。这篇文章提到的那些功能。在模块中进一步定义。 t是一个testcafe导入 最初,我想剔除所有函数,并测试statAccountAssignments调用一次(之后,我将测试传入的数据的各种组合,但我无法超越第一个障碍) 我对我们的非异步无头测试库进行了单元测试,但是Async await Getting TypeError:在存根异步方法时无法存根不存在的own属性,async-await,mocha.js,sinon,chai,testcafe,Async Await,Mocha.js,Sinon,Chai,Testcafe,我正在尝试为我们的testcafe业务函数库编写单元测试,这些函数库很小,但很快就会发展起来,即使用页面文件测试任何非简单逻辑的函数库 为此,我试图为这个函数编写我的第一个单元测试 entityTabs-是一个导入的异步模块,ui是一个导入的非异步模块,accountAssignmentControls是一个页面文件。这篇文章提到的那些功能。在模块中进一步定义。 t是一个testcafe导入 最初,我想剔除所有函数,并测试statAccountAssignments调用一次(之后,我将测试传入的
- a) 这是非异步的,并且
- b) 它是较旧的节点,因此某些结构等是不同的李>
您没有正确地删除
entityTabs
,并且您正在测试的模块没有使用您的存根
更具体地说:您已经声明了一个本地varlet entityTabs代码>然后分配该变量,entityTabs=sinon.stub()代码>。最后,您试图在该对象上删除一个方法startAccountAssignment()
,但它没有这样的属性,因为它不是实际的entityTabs
module/对象,并且根据您包含的代码片段,它甚至不是您正在测试的模块将使用的方法。
根据entityTabs
对象的编写方式(它在自己的模块中吗?它是单例吗?它是类吗?),您需要导入它,并删除要模拟的方法,或者您想使用类似于模拟entityTabs
的东西,与此无关,但用于获取信息-使用prototype关键字删除实例方法
i-esandbox.stub(deviceRegistryRepository.prototype,“getByName”).resolve()代码>
对于静态方法,不需要使用prototype关键字
i-esandbox.stub(myStaticClass.prototype,“getMyStaticMethod”).resolve()代码>entityTabs是其自身模块中的一个类,因此在该函数所在的类中导入<代码>从“../business functions/entity navigation”导入EntityNavigation;const entityTabs=new EntityNavigation()代码>谢谢,这正是我错过的!
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;
});
});
});
});
});