我正在为onAfterDelete
设置单元+集成测试:
Assessment.onAfterDelete = async () => {
...
// Log assessment deleted
await Activity.create({
assessmentId,
activityTypeId: ACTIVITY_TYPE.ASSESSMENT_DELETED,
}, options);
...
};
虽然我知道如何测试Activity.create
被调用,但我真的想测试Activity
是否已成功创建。
如果它不是异步的,那么我将按如下方式使用Sinon.spy:
it('logs the assessment deleted activity', async () => {
sinon.spy(Activity, 'create');
await Assessment.onAfterDelete(...);
expect(Activity.create).returned({
activityTypeId: ACTIVITY_TYPE.ASSESSMENT_DELETED,
assessmentId: standardAssessmentData.id,
});
Activity.create.restore();
});
当然,这不起作用,因为Activity.create
会返回Promise。
用一段时间谷歌搜索Chai和Sinon的各种口味后,我还没有找到这个用例的解决方案。我该如何测试这个返回值?
答案 0 :(得分:0)
虽然我的问题的答案已经被robertklep所覆盖,但我实际上最终在内部方法Activity.create
中将调用包裹到Assessment.logDeleteActivity
并对其进行测试。
答案 1 :(得分:0)
您可以使用chai-as-promised
:
const chai = require('chai');
const chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
it('logs the assessment deleted activity', async () => {
sinon.spy(Activity, 'create');
await Assessment.onAfterDelete();
// Make sure `Activity.create()` got called.
expect(Activity.create.called).to.be.true;
// Check the resolved value.
await expect(Activity.create.firstCall.returnValue).to.eventually.equal({
activityTypeId : ACTIVITY_TYPE.ASSESSMENT_DELETED,
assessmentId : standardAssessmentData.id,
});
// Restore the original.
Activity.create.restore();
});