相关疑难解决方法(0)

在Jest中嘲弄全局

在Jest中有没有办法模拟全局对象,比如navigator,Image*?我已经非常放弃了这一点,并将其留给了一系列可模拟的实用方法.例如:

// Utils.js
export isOnline() {
    return navigator.onLine;
}
Run Code Online (Sandbox Code Playgroud)

测试这个微小的功能很简单,但很苛刻,而且根本不具有确定性.我可以获得75%的方式,但这是我可以做的:

// Utils.test.js
it('knows if it is online', () => {
    const { isOnline } = require('path/to/Utils');

    expect(() => isOnline()).not.toThrow();
    expect(typeof isOnline()).toBe('boolean');
});
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我对这个间接是好的,我现在可以navigator通过这些实用程序访问:

// Foo.js
import { isOnline } from './Utils';

export default class Foo {
    doSomethingOnline() {
        if (!isOnline()) throw new Error('Not online');

        /* More implementation */            
    }
}
Run Code Online (Sandbox Code Playgroud)

......并确定性地测试这样......

// Foo.test.js
it('throws when offline', () => {
    const Utils = require('../services/Utils');
    Utils.isOnline …
Run Code Online (Sandbox Code Playgroud)

javascript dependencies unit-testing jestjs babel-jest

49
推荐指数
5
解决办法
5万
查看次数

如何模拟像New Date()这样的构造函数

我有一个方法,它依赖于new Date创建一个日期对象,然后操纵它.我正在测试操作是否按预期工作,因此我需要将返回的日期与预期日期进行比较.为了做到这一点,我需要确保new Date在测试和被测试的方法中返回相同的值.我怎样才能做到这一点?

有没有办法实际模拟构造函数的返回值?

我可以使用提供日期对象的函数创建一个模块,并且可以进行模拟.但这似乎是我代码中不必要的抽象.

一个要测试的示例函数......

module.exports = {
  sameTimeTomorrow: function(){
    var dt = new Date();
        dt.setDate(dt + 1);
    return dt;
  }
};
Run Code Online (Sandbox Code Playgroud)

我该如何模拟返回值new Date()

javascript jestjs

18
推荐指数
5
解决办法
2万
查看次数