10

我想知道如果我将 ES6 导入/导出与 babel 一起使用,如何在 Jasmine 上监视/存根函数?

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" 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
});`

我尝试了这种方法,但它也不起作用...... MobileDetect.prototype.constructor 被窥探,但 MobileDetect 直接没有。

你怎么看这个问题?

4

1 回答 1

1

与测试中模拟语句的proxyquire类似require(),您可以使用babel-plugin-rewire对ES6 导入执行相同的操作。

您的测试设置可能看起来像这样;

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

beforeEach(() => {
    this.fakeMobileDetect = jasmine.createSpy();
    myModuleUnderTest.__Rewire__('MobileDetect', this.fakeMobileDetect);
});

您可以使用它恢复正常;

afterEach(() => {
    myModuleUnderTest.__ResetDependency__('MobileDetect');
});
于 2017-02-22T16:04:32.150 回答