gpt4 book ai didi

javascript - Jasmine:使用callFake后,如何恢复到原来的功能?

转载 作者:行者123 更新时间:2023-11-30 15:36:03 26 4
gpt4 key购买 nike

假设您有 spyOn(obj, 'method').and.callFake(fn);。您随后如何将 obj.method 恢复为其原始功能?

用例:如果你在一个大的 beforeEach 中做一个 callFake 并且想对你的一个测试用例使用原始方法,但在其余的测试用例中使用 fake .

test.js

var obj = {
method: function () {
return 'original';
},
}

module.exports = obj;

testSpec.js

var obj = require('../test.js');

describe('obj.method', function () {
it('should return "original" by default', function () {
expect(obj.method()).toBe('original');
});

it('should return "fake" when faked', function () {
spyOn(obj, 'method').and.callFake(function () {
return 'fake';
});

expect(obj.method()).toBe('fake');
});

it('should return "original" when reverted after being faked', function () {
spyOn(obj, 'method').and.callFake(function () {
return 'fake';
});

// what code can be written here to get the test to pass?

expect(obj.method()).toBe('original');
});
});

我正在使用 Jasmine v2.5.2。


编辑:好吧,我想你可以这样写:

obj.method = function () {
return 'original';
};

但这感觉太不干了。有没有像 obj.method.revertToOriginal() 这样基于 jasmine 的东西?

最佳答案

您可以在侦测方法上调用 callThrough() 以将其恢复为基本功能。

var obj = {
method: function() {
return 'original'
}
}

describe('obj.method', function() {
it('should return "original" by default', function() {
expect(obj.method()).toBe('original');
});

it('should return "fake" when faked', function() {
spyOn(obj, 'method').and.callFake(function() {
return 'fake';
});

expect(obj.method()).toBe('fake');
});

it('should return "original" when reverted after being faked', function() {
spyOn(obj, 'method').and.callFake(function() {
return 'fake';
});

obj.method.and.callThrough() // method for revert spy

expect(obj.method()).toBe('original');
});
});
<link href="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine.css" rel="stylesheet" />
<script src="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine-2.0.3-concated.js"></script>

关于javascript - Jasmine:使用callFake后,如何恢复到原来的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41528742/

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