测试不返回任何值的方法(jasmine angular4)

时间:2017-10-04 09:10:11

标签: angular jasmine karma-jasmine

我正在开发一个项目,我正在使用茉莉花进行测试。 我有一种情况,方法不返回任何值,但它只是设置类属性。我知道如何在一个返回值的方法上使用spy,但不知道如何在不返回任何值的方法上使用它。我在网上搜索但找不到任何合适的资源。 方法如下

CleanUpTempFiles

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:4)

如何测试不返回任何内容的方法

以下是测试不返回任何内容的方法的示例。

var serviceUnderTest = {
  method: function() {
    console.log('this function doesn't return anything');
  }
};

it('should be called once', function() {
  spyOn(serviceUnderTest, 'method');

  serviceUnderTest.method();

  expect(serviceUnderTest.method.calls.count()).toBe(1);
  expect(serviceUnderTest.method).toHaveBeenCalledWith();
});

如何测试回调

我怀疑你的真正问题是测试你传递给subscribe()函数的函数是否符合预期。如果那个是你真正想要的,那么以下内容可能会有所帮助(请注意,我把它写在了我的头顶,所以可能会有一个错字)。

var serviceUnderTest = {
  method: function() {
    this.someOtherMethod(function() { this.active = true; });
  },
  someOtherMethod: function(func) {
    func();
  }
}

it('should execute the callback, setting "active" to true', function() {
  spyOn(serviceUnderTest, 'someOtherMethod');

  serviceUnderTest.method();

  expect(serviceUnderTest.someOtherMethod.calls.count()).toBe(1);
  var args = serviceUnderTest.someOtherMethod.calls.argsFor(0);
  expect(args.length).toBeGreaterThan(0);
  var callback = args[0];
  expect(typeof callback).toBe('function');

  expect(serviceUnderTest.active).toBeUndefined();
  callback();
  expect(serviceUnderTest.active).toBe(true);
});

您的情景

对于较旧的语法感到抱歉,我是从头开始写的,所以我觉得它很有用,而不是看起来很酷,但有一些错别字。此外,我还没有使用过Observables,所以测试它们的方式可能比我要向你展示的更好,而且可能相当于创建一个新的Observable,并监视订阅。由于这是我的头脑,我们将不得不做。

it('should subscribe with a function that sets _active to true', function() {
  // Arrange
  var observable = jasmine.createSpyObj('Observable', ['subscribe']);
  spyOn(http, 'get').and.returnValue(observable);

  // Act... (execute your function under test)
  service.updateDvStatus();

  // Assert
  expect(http.get.calls.count()).toBe(1);
  expect(http.get).toHaveBeenCalledWith(service.functionControlUrl);
  expect(observable.subscribe.calls.count()).toBe(1);
  var args = observable.subscribe.calls.argsFor(0);
  expect(args.length).toBeGreaterThan(0);
  var callback = args[0];
  expect(typeof callback).toBe('function');

  service._active = false;
  callback();
  expect(service._active).toBe(true);
});