Câu trả lời:
Bạn có thể sử dụng spy.and.returnValues (như Jasmine 2.4).
ví dụ
describe("A spy, when configured to fake a series of return values", function() {
beforeEach(function() {
spyOn(util, "foo").and.returnValues(true, false);
});
it("when called multiple times returns the requested values in order", function() {
expect(util.foo()).toBeTruthy();
expect(util.foo()).toBeFalsy();
expect(util.foo()).toBeUndefined();
});
});
Có một số điều bạn phải cẩn thận, có một chức năng khác sẽ tương tự như câu thần chú returnValue
mà không có s
, nếu bạn sử dụng nó, hoa nhài sẽ không cảnh báo bạn.
Đối với các phiên bản cũ hơn của Jasmine, bạn có thể sử dụng spy.andCallFake
cho Jasmine 1.3 hoặc spy.and.callFake
Jasmine 2.0 và bạn sẽ phải theo dõi trạng thái 'được gọi', thông qua một đóng đơn giản hoặc thuộc tính đối tượng, v.v.
var alreadyCalled = false;
spyOn(util, "foo").andCallFake(function() {
if (alreadyCalled) return false;
alreadyCalled = true;
return true;
});
.returnValues
- hai hàm rõ ràng là khác nhau, nhưng việc chuyển nhiều đối số để.returnValue
không gây ra lỗi. Tôi không muốn thừa nhận rằng tôi đã lãng phí bao nhiêu thời gian vì một nhân vật đó.