javascript - 如何在Jasmine中设置函数?

标签 javascript angular unit-testing jasmine typeerror

我试图在 Jasmine 中覆盖一个函数,但收到错误“TypeError: inputField.setAttribute is not a function”。 我需要做什么来解决这个问题?我需要 mock 这个吗?努力几天来解决这个问题,但没有得到任何解决方案。

谁知道我需要做什么?

功能:

setInput() {
    const inputField = this.$document[0].querySelector('.input-field');

    if (this.inputElement.styles.includes('InputYes')) {
        inputField.setAttribute('input-yes', '');
    } if (this.inputElement.styles.includes('InputNo')) {
        inputField.setAttribute('input-no', '');
    }
}

Jasmine :

describe('setInput method', () => {
    it('test', () => {
        // given
        var spy = spyOn(document, 'querySelector').and.returnValue(angular.element('<input class="input-field" type="text">'));
        const inputController = new InputController(this.$document);
        inputController.inputElement = {
            styles: ['InputYes']
        };

        // when
        inputController.setInput();

        // then
        expect(inputController.$document[0].querySelector('.input-field')[0].getAttribute('input-yes')).toBe('');
        expect(spy).toHaveBeenCalledWith('<input class="input-field" input-yes type="text">');
    });
});

最佳答案

我猜测,但基于快速代码审查。您的代码正在以数组形式访问 $document:

this.$document[0].querySelector('.input-field');

但是,你的 spy 就在文件上:

 var spy = spyOn(document, 'querySelector').and.returnValue(angular.element('<input class="input-field" type="text">'));

根据您共享的代码,我猜测 $document[0]document 不同

我假设如果您监视组件中的 $document 对象,您可能会得到更好的结果。像这样:

var spy = spyOn(inputController.$document[0], 'querySelector').and.returnValue(angular.element('<input class="input-field" type="text">'));

关于javascript - 如何在Jasmine中设置函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58956079/

相关文章:

javascript - Chart.js v2 有没有办法水平绘制条形图?

javascript - 如何使用正则表达式匹配中间有连字符的定长数字?

JavaScript 常量 - 定义多个函数

javascript - ionic2登录后如何将菜单按钮显示到另一个页面

angular - 为什么 Angular-CLI 'ng build' 显示 "Killed"?

java - 使用 Mockito 2 模拟最后一个类

unit-testing - MonoTouch 和 NUnitLite : what is the "Host" setting for?

javascript - IE8 jQ 设置 CSS 属性(宽度或边距)被忽略

javascript - Node js中路由期间的CORS问题

c# - WPF 应用程序的单元测试失败,出现 NotSupportedException "The Uri prefix is not recognized"