我有一个带有<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>
知道为什么吗?
谢谢!
答案 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);
通过这种方式,我们不会发现单元测试存在任何问题,所有问题都将通过。