ded*_*rot 9 javascript spy jasmine ecmascript-6 es6-module-loader
我想知道如果我使用ES6导入/导出与babel,我怎么能在Jasmine上监视/存根函数?
import MobileDetect from 'mobile-detect';
it('should spy MobileDetect', () => {
MobileDetect = jasmine.createSpy('MobileDetect');
});`
Run Code Online (Sandbox Code Playgroud)
第一个问题是我无法重写只读模块
模块构建失败: SyntaxError: /Users/oleg/projects/rp/popup/lib/spec/popup.spec.js: "MobileDetect" is read-only
it('should spy MobileDetect', () => {
console.log(MobileDetect.prototype.constructor === MobileDetect); //true
spyOn( MobileDetect.prototype, 'constructor' );
console.log(MobileDetect.prototype.constructor === MobileDetect); //false
});`
Run Code Online (Sandbox Code Playgroud)
我尝试过这种方法,但它也不起作用...... MobileDetect.prototype.constructor发誓,但MobileDetect不直接.
你怎么看待这个问题?
与测试中用于模拟语句的proxyquire类似,您可以使用babel-plugin-rewire对 ES6 导入执行相同的操作。require()
您的测试设置可能看起来像这样;
import myModuleUnderTest from '../src/popup';
beforeEach(() => {
this.fakeMobileDetect = jasmine.createSpy();
myModuleUnderTest.__Rewire__('MobileDetect', this.fakeMobileDetect);
});
Run Code Online (Sandbox Code Playgroud)
您可以使用它恢复正常;
afterEach(() => {
myModuleUnderTest.__ResetDependency__('MobileDetect');
});
Run Code Online (Sandbox Code Playgroud)