javascript - 如何在 AngularJS 测试中将 DOM 更改与模型同步

标签 javascript angularjs testing

我正在尝试模拟用户操作并测试 AngularJS Controller 对它们的 react 。

describe('Testing a controller component', function () {
    beforeEach(inject(function ($compile, $rootScope, $httpBackend, $templateCache) {
        scope = $rootScope.$new();
        element = angular.element('<sign-up></sign-up>');
        element = $compile(element)(scope);
        scope.$digest();
        controller = element.controller('signUp');
        scope.$apply();
    }));

    it('should render template', function () {
        element.find('input').val('123');
        scope.$digest();
        expect(controller.firstName).toBe('123');
    });
});

由于模型字段未更新,测试失败。

Expected undefined to be '123'.
        at UserContext.<anonymous> (tests/calculator.controller.test.js:54:42)

我知道它违反了 AngualrJs 方法,但我想用它来进行测试。

最佳答案

更多“AngualrJS”——这里模拟用户输入的方法是访问输入的ngModelController。并使用 $setViewValue() method 更改 View 值.这样的事情应该有效:

it('should reflect to the users input', function () {
    var input = element.find('input');
    var ngModelCtrl = input.controller('ngModel');
    ngModelCtrl.$setViewValue('Dan');
    expect(controller.firstName).toBe('Dan');
});

但是如果您仍然想继续您的方法,那么您必须触发 input 元素上的 updateOn 事件之一(使用 triggerHandler method ),因此值将应用于 the $modelValue :

it('should reflect to the users input', function () {
    element.find('input').val('123').triggerHandler('input');
    expect(controller.firstName).toBe('123');
});

关于javascript - 如何在 AngularJS 测试中将 DOM 更改与模型同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48286175/

相关文章:

javascript - AngularJS 中的树状复选框

jakarta-ee - 任何类型的查询都找不到持久化实体

javascript - 如何在 Canvas 上拖动多个形状? [动力学]

java - 如何在 HTML 页面中显示 CSV 文件中的大量数据?

javascript - Angular JS 中的链式 promise 问题

java - 如何自动化性能测试并与 CI 集成?

Javascript 日期测试工具

javascript - 将应用程序移动到子域时出现跨域安全错误 (2018)

javascript - 如何获取元素的类型。 JavaScript/jQuery

javascript - 使用 ng-grid 仅选择特定列