相关疑难解决方法(0)

如何使用Jest模拟JavaScript窗口对象?

我需要测试一个在浏览器中打开新选项卡的函数

  openStatementsReport(contactIds) {
    window.open(`a_url_${contactIds}`);
  }
Run Code Online (Sandbox Code Playgroud)

我想模拟窗口的open函数,这样我就可以验证正确的URL是否传递给open函数.

使用Jest,我不知道如何模仿窗口.我尝试使用模拟函数设置window.open但这种方式不起作用.以下是测试用例

it('correct url is called', () => {
  window.open = jest.fn();
  statementService.openStatementsReport(111);
  expect(window.open).toBeCalled();
});
Run Code Online (Sandbox Code Playgroud)

但它给了我错误

expect(jest.fn())[.not].toBeCalled()

    jest.fn() value must be a mock function or spy.
    Received:
      function: [Function anonymous]
Run Code Online (Sandbox Code Playgroud)

我应该怎么做测试用例?任何建议或提示表示赞赏

javascript mocking jestjs

60
推荐指数
10
解决办法
6万
查看次数

如何使用Jest测试输出是随机的函数?

如何使用Jest测试输出是随机的函数?像这样:

import cuid from 'cuid';  
const functionToTest = (value) => ({
    [cuid()]: {
        a: Math.random(),
        b: new Date().toString(),
        c: value,
    }
});
Run Code Online (Sandbox Code Playgroud)

所以输出functionToTest('Some predictable value')将是这样的:

{
  'cixrchnp60000vhidc9qvd10p': {
    a: 0.08715126430943698,
    b: 'Tue Jan 10 2017 15:20:58 GMT+0200 (EET)',
    c: 'Some predictable value'
  },
}
Run Code Online (Sandbox Code Playgroud)

javascript jestjs

18
推荐指数
4
解决办法
8789
查看次数

如何使用Jest + Vuejs模拟window.location.href?

目前,我正在为我的项目实施单元测试,并且其中包含一个文件window.location.href

我想对此进行测试,这是我的示例代码:

it("method A should work correctly", () => {
      const url = "http://dummy.com";
      Object.defineProperty(window.location, "href", {
        value: url,
        writable: true
      });
      const data = {
        id: "123",
        name: null
      };
      window.location.href = url;
      wrapper.vm.methodA(data);
      expect(window.location.href).toEqual(url);
    });
Run Code Online (Sandbox Code Playgroud)

但是我得到这个错误:

TypeError: Cannot redefine property: href
        at Function.defineProperty (<anonymous>)
Run Code Online (Sandbox Code Playgroud)

我尝试了一些解决方案,但没有解决。我需要一些提示来帮助我摆脱困境。请帮助。

unit-testing jasmine vue.js vuejs2 vue-test-utils

14
推荐指数
8
解决办法
2万
查看次数

在开玩笑中嘲笑global.window

我有一个在节点和浏览器上运行的函数,我想用jest测试:

const myFn = () => {
  if(typeof window !== 'object'){
     return 1;
  }
  return 2;
}
Run Code Online (Sandbox Code Playgroud)

我如何能够将全局窗口对象设置为undefined,以测试节点分支,并返回1.

例如

  test('myTest', ()=> {
      global.window = undefined;
      expect(myFn()).toEqual(1); // result: 2
  });
Run Code Online (Sandbox Code Playgroud)

我试过这里的建议没有成功: 在Jest中模拟全局变量

javascript reactjs jestjs

11
推荐指数
1
解决办法
6894
查看次数

开玩笑地测试,使变量可用于所有测试文件

问题是在开始测试之前,我需要做一些准备工作。我有几个测试文件,每个文件都需要在每个测试文件之前打开Rabbit连接,并在每个文件中的所有测试结束后关闭它。问题是,我必须在测试文件中复制代码以打开和关闭连接。如何在一个文件中处理连接。我正在使用TypeScript,因此在这种情况下,诸如jest-environment-nodejest-set之类的几种解决方案都无济于事。另外,我还可以使用以下安装文件解决此问题:

"setupFiles": [
      "./src/inttests/partial/mocks/setup.ts"
    ],
Run Code Online (Sandbox Code Playgroud)

然后在安装文件中写类似:

let channel: PubChannel;

beforeAll(() => {
  channel = new PubChannel('amqp://localhost', true);
  exports.ss = new SystemService(channel); // or using globals but it doesn't actually work in both cases.
});

afterAll(async () => {
    await channel.closeConnection();
  }
);
Run Code Online (Sandbox Code Playgroud)

事实是,我需要在测试中使用ss变量才能调用某些函数。但是我不知道如何使它们从setupt.ts文件中可用,因为我不能使用导出斜线词,因为该值已在beforeAll范围内进行了修改。有没有机会解决这个荒谬的问题?

javascript integration-testing typescript jestjs

5
推荐指数
0
解决办法
908
查看次数

如何模拟Google Analytics(分析)函数调用ga()

我有一个服务MyService,其功能使用ga()要测试的事件跟踪调用:

angular.module('myModule').factory('MyService', [function() {

    var myFunc = function() {
        ga('send', 'event', 'bla');
        // do some stuff
    }

    return {
        myFunc: myFunc
    }
]);
Run Code Online (Sandbox Code Playgroud)

我的规格文件如下所示:

describe('The MyService', function () {

    var MyService,
        ga;

    beforeEach(function () {
        module('myModule');
        ga = function() {};
    });

    beforeEach(inject(function (_MyService_) {
        MyService = _MyService_;
    }));

    it('should do some stuff', function () {
        MyService.myFunc();
        // testing function
    });
});
Run Code Online (Sandbox Code Playgroud)

运行测试始终可以为我提供:

ReferenceError:找不到变量:ga

unit-testing google-analytics google-analytics-api jasmine angularjs

3
推荐指数
2
解决办法
2680
查看次数