gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:19:22 28 4
gpt4 key购买 nike

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

updateDvStatus() {
this._http.get(this.functionControlUrl).subscribe(() => {
this._active = true;
}, (error) => {
this.errorStatusCode = error.status;
this.errorPageService.setStatusCode(this.errorStatusCode);
})
}

如有任何帮助,我们将不胜感激。

最佳答案

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

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

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);
});

您的场景

对于较旧的语法,我深表歉意,我是根据自己的想法写的,所以我宁愿它能工作,而不是看起来很酷,但有一些错别字。此外,我还没有使用 Observable,因此可能有比我将要向您展示的更好的方法来测试它们,这可能相当于创建一个新的 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);
});

关于angular - 测试不返回任何值的方法(jasmine angular4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46561089/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com