Wallaby.js 不使用 jasmine callFake(...)?

Wallaby.js not working with jasmine callFake(...)?

问题

wallaby.js 似乎没有和 jasmine callFake 一起工作。我想在 "fake" 函数中使用传递给原始函数的参数。但我总是用 wallaby.

得到 undefined

下面的测试在直接 运行 jasmine 时有效,但在 运行 通过 wallaby.

时中断

这件事发生在其他人身上吗? 关于如何修复它有什么想法吗?

测试

it('test callFake and wallaby', async () => {
  // Arrange
  const myObj = {
    myFunc: (a) => a + 1,
  };

  spyOn(myObj, 'myFunc')
    .and.callFake(arg => arg);

  // Act
  const result = myObj.myFunc(1);

  // Assert
  expect(result).toBe(1);
});

相关信息

Wallaby.js配置文件

module.exports = (wallaby) => {
  return {
    files: [
      'src/**/*.js',
      'migrations/*',
      'test/_helpers/*',
      'seeds/*',
      'config/*',
      { pattern: '.env', instrument: false },
    ],

    tests: [
      'test/**/*.spec.js',
    ],

    compilers: {
      '**/*.js': wallaby.compilers.babel(),
    },

    testFramework: 'jasmine',

    env: {
      type: 'node',

      params: {
        env: 'NODE_ENV=test;MONGODB_CONQUERY=mongodb://localhost:27017/athena-test',
      },
    },
    workers: {
      initial: 1,
      regular: 1,
      restart: true,
    },

    setup: (/* wallaby */) => {
      require('dotenv').load({ path: '.env' }); // eslint-disable-line
      require('./test/_helpers/dropDatabase'); // eslint-disable-line
    },

    teardown: (/* wallaby */) => {
    },
  };
};

代码编辑器或IDE名称和版本

Visual Studio 代码 v1.21.1

OS 名称和版本

OSX 10.13.3

我找到了解决方法:

我在 callFake 函数中使用了对间谍的引用。请参阅下面的代码:

it('test callFake and wallaby', async () => {
    // Arrange
    const myObj = {
      myFunc: (a) => a + 1,
    };

    const spy = spyOn(myObj, 'myFunc')
      .and.callFake(
        () => spy.calls.argsFor(0)[0]
      );
    // Act
    const result = myObj.myFunc(1);

    // Assert
    expect(result).toBe(1);
  });

但我仍然认为这不是正确的行为。

这是 Jasmine 中的一个错误 2.x wallaby 支持 it is fixed now.