javascript - JavaScript代码错误中的策略模式实现
问题描述
我有Calculation.js文件CalculationStrategy.js和CalculationStrategyB.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');
});
解决方案
罪魁祸首:-
let calculation = new calculation(1,2, op);
let
为您的声明使用不同的名称,如下所示:-
let customCalculation = new calculation(1,2, op);
推荐阅读
- spring-boot - 用过mybatisPlus。bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException
- c++ - C++ 发布序列详细信息
- flutter - 如何去除颤动的gridView间距
- mysql - 如何将虚拟列作为常量添加到查询中
- javascript - 类型错误:this.$el.bracket 不是函数
- c++ - 在 OpenCV 中定义初始化的 3D 矩阵 Mat_ 的一个衬垫
- javascript - 如何以编程方式知道 Mongo Realm 中的错误登录?
- git - gitignore 不适用于我的后端文件夹中的 process.env
- reactjs - 反应 | Redux-Form | 字段 为字段分配状态
- aws-cli - 将 AWS 的全屏“菜单”输出更改为标准输出?