我正在开发一个项目,我正在使用茉莉花进行测试。 我有一种情况,方法不返回任何值,但它只是设置类属性。我知道如何在一个返回值的方法上使用spy,但不知道如何在不返回任何值的方法上使用它。我在网上搜索但找不到任何合适的资源。 方法如下
CleanUpTempFiles
任何帮助都将不胜感激。
答案 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);
});