Tôi muốn thử một hàm với đùa, nhưng chỉ khi nó được gọi với đối số cụ thể, ví dụ:Tôi có thể giả lập các hàm với các đối số cụ thể bằng Jest không?
function sum(x, y) {
return x + y;
}
// mock sum(1, 1) to return 4
sum(1, 1) // returns 4 (mocked)
sum(1, 2) // returns 3 (not mocked)
Có một tính năng tương tự được thực hiện trong thư viện RSpec của Ruby:
class Math
def self.sum(x, y)
return x + y
end
end
allow(Math).to receive(:sum).with(1, 1).and_return(4)
Math.sum(1, 1) # returns 4 (mocked)
Math.sum(1, 2) # returns 3 (not mocked)
Những gì tôi đang cố gắng để đạt được trong các thử nghiệm của tôi là tách một tốt hơn, chúng ta hãy nói rằng tôi muốn thử nghiệm một chức năng dựa vào sum
:
function sum2(x) {
return sum(x, 2);
}
// I don't want to depend on the sum implementation in my tests,
// so I would like to mock sum(1, 2) to be "anything I want",
// and so be able to test:
expect(sum2(1)).toBe("anything I want");
// If this test passes, I've the guarantee that sum2(x) is returning
// sum(x, 2), but I don't have to know what sum(x, 2) should return
Tôi biết rằng có một cách để thực hiện điều này bằng cách làm một cái gì đó như:
sum = jest.fn(function (x, y) {
if (x === 1 && y === 2) {
return "anything I want";
} else {
return sum(x, y);
}
});
expect(sum2(1)).toBe("anything I want");
Nhưng nó sẽ được tốt đẹp nếu chúng ta có một số chức năng đường để đơn giản hóa nó.
Nghe có hợp lý không? Chúng ta đã có tính năng này trong Jest chưa?
Cảm ơn phản hồi của bạn.