用茉莉花测试猎犬的远程选项

问题描述 投票:0回答:1

我正在与https://bootstrap-tagsinput.github.io/bootstrap-tagsinput/examples/合作处理标签选择。该库使用猎犬作为建议引擎,如这些示例所示。

在我的angular2 +组件测试中,我正在调用$el.focus()。 $ el是我使用bootstrap-tagsinput的输入字段。

在focus()事件之后,我调用了超过1000毫秒的超时然后我将ajax响应保存为这样......

const request = jasmine.Ajax.requests.mostRecent();
request.respondWith(response);

问题是,测试是CircleCI中的flaky,它们在本地传递(仅在使用浏览器时)。在CI,他们有时工作,有时他们没有。当我删除超时(我希望将其删除)时,测试根本不起作用。这是因为调用jasmine.Ajax.requests.mostRecent()会返回undefined

当我尝试在终端本地运行整个角度套件时,测试总是失败。感觉就像猎犬的ajax召唤根本没有被触发或被其他东西吞没。这是我的全套测试服......

describe('Component', () => {
  let $el: JQuery;

  beforeEach(() => {
    jasmine.Ajax.install();
  });

  afterEach(() => {
    jasmine.Ajax.uninstall();
  });

  describe('filters with different roles', () => {
    it('should load and select project filter optionsr', () => {
      setCurrentUser({ role: ['some role'] });
      $el = instantiateComponent();

      const response = {
        responseText: '[{ "id":1, "name":"Nice name"}]',
        status: 200,
      };

      $el.find('input[placeholder="Project(s)"]').focus();

      runTimeouts(1000)

      // the focus triggered an Ajax request to /projects.json
      const request = jasmine.Ajax.requests.mostRecent();

      request.respondWith(response); // this fails because request sometimes is undefined.

     // I then test for UI changes here
    });

  });
});

我究竟做错了什么?有没有办法在没有超时的情况下确保测试的一致性?

ajax angular karma-jasmine bloodhound bootstrap-tags-input
1个回答
0
投票

事实证明使用$elemet.focus()$element.click()是问题所在。它的工作原理是使用ngClick()代替。 $el.find('input[placeholder="Project(s)"]').ngClick();。不知道为什么会这样。

© www.soinside.com 2019 - 2024. All rights reserved.