Javascript Jasmine:如何在ES6上监视导入的函数/构造函数?

Javascript Jasmine:如何在ES6上监视导入的函数/构造函数?,javascript,jasmine,ecmascript-6,spy,es6-module-loader,Javascript,Jasmine,Ecmascript 6,Spy,Es6 Module Loader,我想知道如果我在babel中使用ES6导入/导出,如何在Jasmine上使用spy/stub函数 import MobileDetect from 'mobile-detect'; it('should spy MobileDetect', () => { MobileDetect = jasmine.createSpy('MobileDetect'); });` 第一个问题是我不能重写只读模块 模块构建失败:SyntaxError:/Users/oleg/projects/rp

我想知道如果我在babel中使用ES6导入/导出,如何在Jasmine上使用spy/stub函数

import MobileDetect from 'mobile-detect';
it('should spy MobileDetect', () => {
    MobileDetect = jasmine.createSpy('MobileDetect');
});`
第一个问题是我不能重写只读模块

模块构建失败:
SyntaxError:/Users/oleg/projects/rp/popup/lib/spec/popup.spec.js:“MobileDetect”是只读的

it('should spy MobileDetect', () => {
    console.log(MobileDetect.prototype.constructor === MobileDetect); //true
    spyOn( MobileDetect.prototype, 'constructor' );
    console.log(MobileDetect.prototype.constructor === MobileDetect); //false
});`
我尝试过这种方法,但它不太管用。。。MobileDetect.prototype.constructor被监视,但MobileDetect不直接监视

您对这个问题有何看法?

类似于在测试中模拟
require()
语句,您可以使用它对ES6导入执行相同的操作

您的测试设置可能如下所示

import myModuleUnderTest from '../src/popup';

beforeEach(() => {
    this.fakeMobileDetect = jasmine.createSpy();
    myModuleUnderTest.__Rewire__('MobileDetect', this.fakeMobileDetect);
});
你可以用它恢复正常

afterEach(() => {
    myModuleUnderTest.__ResetDependency__('MobileDetect');
});

您无法监视
MobileDetect
,因为变量的值无法重写为新的监视函数。我猜:如果你做了
var myMobileDetect=MobileDetect
,然后监视
myMobileDetect
,会怎么样?显然,您需要更改代码以使用
myMobileDetect
。我想知道您在测试中想要完成什么。你想创建一个模仿MobileDetect方法的间谍吗?(模仿)