Kann ich mock-Funktionen mit spezifischen Argumenten mit Scherz?

Ich möchte mock eine Funktion, mit Scherz, aber nur, wenn es aufgerufen wird, mit bestimmten Argumenten, zum Beispiel:

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)

Gibt es eine ähnliche Funktion implementiert, in der Ruby ' s RSpec-Bibliothek:

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)

Was ich versuche zu erreichen, in meinen tests wird eine bessere Entkopplung von, sagen wir, ich will zum testen eine Funktion, die sich auf 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

Ich weiß, dass es eine Möglichkeit dies umzusetzen, indem er etwas wie:

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");

Aber es wäre schön, wenn wir hatten einige Zucker-Funktion, um es zu vereinfachen.

Tut, es klingt vernünftig? Wir haben bereits diese Funktion im Scherz?

Danke für dein feedback.

Schreibe einen Kommentar