首页 > 解决方案 > JavaScript代码错误中的策略模式实现

问题描述

我有Calculation.js文件CalculationStrategy.jsCalculationStrategyB.js

我想对这些文件实施策略模式。但是,当我使用Jest测试文件时。我有一个错误this.stragtegy.doOperation is not a function

我确实按照教程通过使用文件作为基础来实现策略模式Calculation,但我不知道为什么会发生这种情况。

计算.js

class Calculation {
constructor(a, b, op) {
    this.a = a;
    this.b = b;
    this.op = op;
    this.stragtegy = null;
}

static Create(a, b, op){
    return new Calculation(a, b, op);
}

 GetResults() {
    return this.op(this.a,this.b)
}
addOperationToName(fn){
    return function(name){
        const operation = name + ' is an operation';
        return fn(operation);
    }
}

sayOperation(name){
    return name;
}

obtainStructor(){
    return this.a +' '+ this.b;
}

set strategy(stragtegy){
    this.stragtegy = stragtegy;
}

doOperation(){
    return this.stragtegy.doOperation();
}
}
module.exports = Calculation;

计算策略.js

class CalculationStrategy{
doAction(){
    return 'This is Calculation Strategy 1';
}
}
module.exports = CalculationStrategy;

计算策略B.js

class CalculationStrategyB{
doAction(){
    return 'This is Calculation Strategy 2';
}
}
module.exports = CalculationStrategyB;

CalculationStrategy.test.js

const calculation = require('../src/models/Calculation');
const calculationStrategy = require('../src/CalculationStrategy');
const calculationStrategyB = require('../src/CalculationStrategyB');
const Product = require('../src/Operations/Product');

test('Test Strategy of Calculation', () => {
//I need to test the get results function
let op = Product;
let customCalculation = new calculation(1,2, op);
const strategy = new calculationStrategy();
const strategyB = new calculationStrategyB();
customCalculation.stragtegy = strategy;
expect(customCalculation.doOperation()).toBe('This is Calculation Strategy 1');
customCalculation.stragtegy = strategyB;
expect(customCalculation.doOperation()).toBe('This is Calculation Strategy 2');
});

标签: javascriptdesign-patternsjestjs

解决方案


罪魁祸首:-

let calculation = new calculation(1,2, op);

let为您的声明使用不同的名称,如下所示:-

let customCalculation = new calculation(1,2, op);


推荐阅读