如何测试离子模态的模板?

How to test the template of an Ionic modal?

我想测试 Ionic modal 的模板。问题是我无法通过模式访问模板。我想出了一个解决方法并且它有效,但必须有其他解决方案。

我通过以下方式解决了这个问题:

使用模式的模板创建了一个模拟 Angular 指令,因为您可以 test a directive 非常容易。这是我的测试,使用 karma、mocha、chai 和 chai-jquery 插件:

'use strict';

describe('Directive: noteList', function () {
  var $compile;
  var scope;
  var mockDirective;

  angular.module('simpleNote').directive('mockNewNoteModal', function () {
    return {
      resrict: 'E',
      templateUrl: 'scripts/new-note/new-note-modal.html'
    };
  });

  beforeEach(module('simpleNote'));

  beforeEach(module('templates')); // module from ngHtml2JsPreprocessor karma task

   beforeEach(inject(function (_$compile_, _$rootScope_) {
     $compile = _$compile_;
     scope = _$rootScope_.$new();
     mockDirective = $compile('<mock-new-note-modal></mock-new-note-modal>')(scope);
     scope.$digest();
     angular.element(document).find('body').append(mockDirective); // for rendering css
  }));

  describe('Test the template of newNoteModal', function () {
    it('should have a class modal', function () {
      expect(mockDirective.find('div')).to.have.class('modal');
    });
  });
});

我发现有一种使用 karma 测试模板的更简单方法,即使用 karma-jquery 和 chai-jquery 插件。您可以使用 jquery 选择器获取模板元素,如下所示:

expect($('div.modal').html()).to.contain('hello');

这种方法的问题是您不能专注于给定的模板,元素 类 和 id-s 之间可能会发生冲突。

如果你能直接测试模态就好了。或者,如果不可能,是否有任何方法可以在不创建模拟指令的情况下测试给定的 html 模板?

抱歉,我没有 10 个声誉来插入我想要的链接,所以我将它们作为纯文本插入:

业力:业力-runner.github.io/0.12/index.html

摩卡咖啡:github.com/mochajs/mocha

柴:chaijs.com/

chai-jquery: chaijs.com/plugins/chai-jquery

我检查了 Ionic 模态服务的 unit tests,发现如果你想测试 DOM,你有一个接口。例如,您可以像这样测试元素的 类:

expect(yourModalInstance.modalEl.classList.contains('modal')).to.equal(true)

但是其他 DOM 测试呢?你如何到达原始模板和模态的 DOM?我发现您可以通过 yourModalInstance.modalEl 获取模板。但是我可以直接得到模态的解析模板,而不用编译吗?

幸运的是你有一个辅助方法,yourModalInstance.$el,你可以像这样得到解析的dom:

expect(yourModalInstance.$el.find('ion-header-bar')).to.have.class('secondary');

所以答案是 yourModalInstance.$el,如果你想使用 jquery 来测试,而 yourModalInstance.modalEl 如果你想测试原始模板。在长 运行 中,您不需要丑陋的 mock 指令来测试模态只是模态的一个实例,您可以从实例化它的控制器中获取它。耶!