【发布时间】:2020-12-11 09:54:04
【问题描述】:
我正在为一个使用 browser WebAPI interface 的类编写单元测试。
我使用 ts-mockito 来模拟界面(在我的例子中是 WebGL2RenderingContext)。
当我运行测试时,Node 抛出 ReferenceError: WebGL2RenderingContext is not defined
这是可以理解的,因为测试是在NodeJS环境下运行的,不是浏览器,所以类/接口不存在。
有什么方法可以让 NodeJS 环境感知 WebAPI 接口,以便它可以被模拟?
注意:由于它是一个单元测试,它应该不在真正的浏览器上运行。
jsdom 似乎是一个可能的解决方案,但我不知道如何用 ts-mockito 模拟它。
以下 sn-p 说明了我正在尝试做的事情:
import { mock, instance, verify } from 'ts-mockito'
// ========== CLASS ==========
class DummyClass {
dummyMethod() : void {}
}
class TestedClass {
static testDummy(dummy : DummyClass) : void {
dummy.dummyMethod();
}
static testGlCtx(glCtx : WebGL2RenderingContext) : void {
glCtx.flush();
}
}
// ========== TEST ==========
describe('DummyClass', () => {
// This test passed successfully
it('works fine', () => {
const mockDummy = mock(DummyClass);
TestedClass.testDummy( instance(mockDummy) );
verify( mockDummy.dummyMethod() ).once();
});
});
describe('WebGL interface', () => {
it('works fine', () => {
// This line failed with 'ReferenceError: WebGL2RenderingContext is not defined'
const mockGLCtx = mock(WebGL2RenderingContext);
TestedClass.testGlCtx( instance(mockGLCtx) );
verify( mockGLCtx.flush() ).once();
});
});
通过命令mocha --require ts-node/register 'test.ts' 使用 mocha 运行。
【问题讨论】:
标签: node.js mocha.js webapi ts-mockito