У меня есть пример код, написанный ниже (что упрощает от моего фактического выполнения кода), основная идея этой упрощенной версии, чтобы понять, как я могу окурок класса для модульного тестированияSinonjs, как использовать класс инъекции зависимостей?
У меня есть Sensor
класса, который является зависимость впрыскивается в класс Context
, этот Sensor
получит данные от некоторого порта IO
.
Данные датчика будут сравниваться по классу ComputeSensor
для ожидаемого значения, и он вставляет report
ключ в объект context.report
.
Могу ли я узнать, как я могу заглушить или высмеять класс Sensor
, чтобы я мог создать поддельное значение для проверки кода?
class Sensor {
getData() {
return {
heat: this.getHeatSensor(), // get data from some IO
speed: this.getSpeedSensor() // get data from some IO
}
}
}
class Context {
constructor(sensor) {
this.report = {};
this.sensor = sensor;
this.computeSensor = new ComputeSensor();
}
execute() {
this.computeSensor.compute(this, this.sensor.getData());
}
}
class ComputeSensor {
compute(context, sensorData) {
if (sensorData.heat === 123
&& sensorData.speed === 321)
{
context.report = {
sensor: 'ok'
}
}
}
}
const sensor = new Sensor();
const context = new Context(sensor);
context.execute();
console.log(context.report) // { sensor: 'ok }
Возможно, нужный код заглушки будет таким?
const stubSensor = sinon.createStubInstance(Sensor);
// Inject the stub return value here?
stubSensor.getData() = {
heat: 123,
speed: 321,
}
Или я мог бы написать макет класс как below..But я думаю Sinon мог бы сделать это ..
class MockSensor {
getData() {
return {
heat: 123,
speed: 321
}
}
}
как я могу заглушить метод, если использовать sinon.createStubInstance? – Tim