角茉莉测试模态和解析结果

时间:2017-05-31 11:10:52

标签: javascript angularjs jasmine phantomjs karma-jasmine

我试图测试基本上正在进行的功能,

  • 打开确认模式
  • 返回模态的结果(按钮值为OK或Cancel)
  • 如果条件检查结果
  • 调用其他功能

我的控制器功能是;

openPopup() {
  confirmationModal.open().then((result) => {
    if(result === 'OK') {
      someService.doSomething()
          .then(() => {        
            showSuccess();
          }); 
        }
      }).finally(() => {
        confirmationModal.close();
      });
}

我的测试是;

describe('confirmation modal', () => {
beforeEach(() => {

    inject(($controller, _$q_) => {
      var q = _$q_;

      someService = {
        doSomething: jasmine.createSpy()
      };

      var modalResult = {
        then: function(callback) {
          callback("OK");
        }
      };

      confirmationModal = {
        open: jasmine.createSpy().and.returnValue(q.when({ result: modalResult })),
        close: jasmine.createSpy()
      };

      Ctrl = $controller('MainController', { 
        $scope: scope, confirmationModal: confirmationModal, someService: someService
      });
    });
  });

  it('should pass OK value', () => {
    Ctrl.openPopup();

    scope.$digest();

    expect(someService.doSomething).toHaveBeenCalled();
  });
});

当我通过Karma-PhantomJS进行此操作时,我得到未知的预期间谍已被调用。这是我认为我无法通过If模式结果的条件。基本上需要测试条件模态结果如果我可以。 当我测试并期望confirmModal的打开或关闭函数时,测试通过但是如果我在调用confirmModal后期望函数,则测试失败。

我正在努力解决这个基本问题而且我已经非常抱歉如果我错过了一些规则或我的英语不好。

谢谢!

1 个答案:

答案 0 :(得分:1)

为了应用程序使用存根服务,它应该被注入,并且当前它不被注入。在控制器中,它可以注入$controller本地依赖项:

  Ctrl = $controller('MainController', { 
    $scope: scope, confirmationModal, someService
  });

result应该是一个字符串,而不是一个对象,尤其不是模拟像modalResult这样的承诺的对象。它是

  confirmationModal = {
    open: jasmine.createSpy().and.returnValue(q.when('OK')),
    close: jasmine.createSpy()
  };