Karma / jasmine Angular指令提交单击单元测试失败,同时在一堆中运行,但并不孤单

时间:2016-10-25 15:31:46

标签: javascript angularjs unit-testing phantomjs karma-jasmine

我有一个带有<form>的angular指令,它对指令控制器中的函数进行了ng-submit绑定。站起来代码并单独运行单元测试就可以了。

问题是当运行所有单元测试时,我们会看到像

这样的行为
  PhantomJS 1.9.8 (Mac OS X 0.0.0) ERROR
  Some of your tests did a full page reload!
allMessages PhantomJS 1.9.8 (Mac OS X 0.0.0) ERROR
  Some of your tests did a full page reload!
PhantomJS 1.9.8 (Mac OS X 0.0.0) ERROR
  Some of your tests did a full page reload!

以下是单元测试:

it('Verify submit button is clicked', function () {
            var btnSubmit = form.querySelector('#submit');                 
            btnSubmit.click();

            timeout.flush();
            expect(scope.blah).to.equal(blah);}

当我注释掉btnSubmit.click()时,一切都会有效。

这是html:

<paper-dialog modal class="pa-paper-dialog" id="blah" role="alertdialog">
    <paper-button 
        dialog-dismiss 
        class="close-button" 
        ng-click="resetPA(event)"> 

    </paper-button>
    <form class="blah" is="iron-form" ng-submit="submitFunction(blah)" method="get" action="/" id="form">
        <div class="pa-header">text</div>
        <div class="input-fields-panel"></div>
        <div class="buttons-panel">
            <button type="submit" class="blah" id="submit">Admit</button>
            <paper-button noink dialog-dismiss class="blah" ng-click="resetPA(event)">Cancel</paper-button>
        </div>
    </form>
</paper-dialog>

知道为什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我们最终采取了另一条路来解决这个问题......

我们尝试访问isolateScope并直接在测试中调用submit函数,而不是按下click()进行表单提交。

var elem = $compile('<my-directive></my-directive>')(scope);
scope.$digest();
isolateScope = angular.element(elem).isolateScope() || angular.element(elem).scope();

scope.mySubmitfunction(blah blah);

通过这种方式,我们不会发现单元测试存在任何问题,所有问题都将通过。