javascript - $提供超过 1 个值以在描述中进行测试

标签 javascript angularjs jasmine karma-jasmine

我有一个 Angular 指令的 Karma/Jasmine 测试:

describe('placeholder directive', function() {

  // Bindable members
  var element;

  // Load module
  beforeEach(angular.mock.module('app'));

  // Mock service response
  beforeEach(module(function($provide) {
    $provide.value('PlaceholderSupportService', function() {
      return false;
    });
  }));

  // Bind references to global variables
  beforeEach(inject(function($compile, $rootScope) {
    element = $compile('<input name="test" placeholder="Test" />')($rootScope);
    $rootScope.$digest();
  }));

  // Check the correct HTML is rendered
  it('Renders placeholder as input value when placeholder is not supported', inject(function($timeout) {
    $timeout.flush();
    expect(element[0].value).toBe('Test');
  }));

});

如我所愿。但是,我已将 PlaceholderSupportService() 的值强制设置为 false。我想运行第二个测试,我将此值为 true。我似乎无法在 it 语句中访问 $provide,那么我该怎么做呢?

最佳答案

您可以告诉您的 PlaceholderSupportService 返回一个变量。然后,在您的测试 block 上,您更改变量的值。这应该可以解决问题。这是示例:

describe('placeholder directive', function() {

  // Bindable members
  var element;
  var providerResult = false; //Here is the variable that you will change.

  // Load module
  beforeEach(angular.mock.module('app'));

  // Mock service response
  beforeEach(module(function($provide) {
    $provide.value('PlaceholderSupportService', function() {
      return providerResult;
    });
  }));

  // Check the correct HTML is rendered
  it('Renders placeholder as input value when placeholder is not supported', inject(function($timeout) {
    element = $compile('<input name="test" placeholder="Test" />')($rootScope);
    $rootScope.$digest();
    $timeout.flush();
    expect(element[0].value).toBe('Test');
  }));

  // Check the correct HTML is rendered
  it('Renders placeholder as input value when placeholder is supported', inject(function($timeout) {
    providerResult = true; //Here I will change the result of my PlaceholderSupportService
    element = $compile('<input name="test" placeholder="Test" />')($rootScope);
    $rootScope.$digest();
    $timeout.flush();
    expect(element[0].value).toBe('Test');
  }));

});

关于javascript - $提供超过 1 个值以在描述中进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39374737/

相关文章:

javascript - 如何在 Angular 中访问动态添加的 DOM 元素?

angular - 带模拟用户输入的 RxJs/Ngrx TestSheduler (Jasmine)

javascript - Firefox 附加组件从后台/内容脚本访问弹出脚本?

javascript - Javascript函数在没有被调用的情况下运行?

javascript - 获取div内的选择值,然后显示主div的子div

javascript - nvd3-angular 中的自定义饼图颜色

javascript - 自动完成组合框

javascript - 如何像google Drive一样在网页中查看office文件

angularjs - Angular 2 测试 - 组件状态在测试之间持续存在(即不重置)

jquery - 如何使用 jasmine 和 sinon 在函数内模拟 jquery 调用