茉莉Spies.and.stub方法
Jasmine Spies.and.stub method
我一直在通读 Jasmine 文档,并且一直在努力理解 Spies .and.stub
方法的实际作用。英语不是我的母语,所以我什至不知道 "stub" 这个词的实际含义,也没有我的语言的翻译。
文档中说:
When a calling strategy is used for a spy, the original stubbing behavior can be returned at any time with and.stub.
describe("A spy", function() {
var foo, bar = null;
beforeEach(function() {
foo = {
setBar: function(value) {
bar = value;
}
};
spyOn(foo, 'setBar').and.callThrough();
});
it("can call through and then stub in the same spec", function() {
foo.setBar(123);
expect(bar).toEqual(123);
foo.setBar.and.stub();
bar = null;
foo.setBar(123);
expect(bar).toBe(null);
});
});
and.stub
到底有什么用,它有什么用?
关于术语,您可以查看维基百科:http://en.wikipedia.org/wiki/Test_stub
简而言之,它是一个您可以控制的 "fake" 对象,用于替换代码中的 "real" 对象。
对于函数,我的理解是and.stub()
去除了and.callThrough()
对间谍的影响。
当您调用 and.callThrough
时,间谍充当代理,调用真正的函数,但通过间谍对象允许您添加像期望一样的测试。
当您调用 and.stub
时,或者如果您从不调用 and.callThrough
,间谍将不会调用真正的函数。当您不想测试对象的行为但要确保它已被调用时,它非常有用。帮助您保持测试真正单一。
完成上一个答案:
的确,文档上看的不是很清楚,但是源码里写的很清楚:
plan = function() {};
->调用的函数为空
this.callThrough = function() {
plan = originalFn;
->调用的函数是原函数
this.stub = function(fn) {
plan = function() {};
-> 调用的函数为空(再次)
我一直在通读 Jasmine 文档,并且一直在努力理解 Spies .and.stub
方法的实际作用。英语不是我的母语,所以我什至不知道 "stub" 这个词的实际含义,也没有我的语言的翻译。
文档中说:
When a calling strategy is used for a spy, the original stubbing behavior can be returned at any time with and.stub.
describe("A spy", function() {
var foo, bar = null;
beforeEach(function() {
foo = {
setBar: function(value) {
bar = value;
}
};
spyOn(foo, 'setBar').and.callThrough();
});
it("can call through and then stub in the same spec", function() {
foo.setBar(123);
expect(bar).toEqual(123);
foo.setBar.and.stub();
bar = null;
foo.setBar(123);
expect(bar).toBe(null);
});
});
and.stub
到底有什么用,它有什么用?
关于术语,您可以查看维基百科:http://en.wikipedia.org/wiki/Test_stub
简而言之,它是一个您可以控制的 "fake" 对象,用于替换代码中的 "real" 对象。
对于函数,我的理解是and.stub()
去除了and.callThrough()
对间谍的影响。
当您调用 and.callThrough
时,间谍充当代理,调用真正的函数,但通过间谍对象允许您添加像期望一样的测试。
当您调用 and.stub
时,或者如果您从不调用 and.callThrough
,间谍将不会调用真正的函数。当您不想测试对象的行为但要确保它已被调用时,它非常有用。帮助您保持测试真正单一。
完成上一个答案:
的确,文档上看的不是很清楚,但是源码里写的很清楚:
plan = function() {};
->调用的函数为空
this.callThrough = function() {
plan = originalFn;
->调用的函数是原函数
this.stub = function(fn) {
plan = function() {};
-> 调用的函数为空(再次)