我正在尝试编写一个包含一些方法的类。而且我不确定我做错了什么。
为了创建这个类,我需要进行以下测试:
'use strict';
const Editor = require('../editor');
const { expect } = require('chai');
describe('Editor', () => {
it('allows users to write text', () => {
const editor = new Editor();
editor.write('Hello - codez');
expect(editor.toString()).to.equal('Hello - codez');
editor.write('moar');
expect(editor.toString()).to.equal('Hello - codez moar');
});
xit('allows users to undo writes', () => {
const editor = new Editor();
editor.write('Hello - codez');
expect(editor.toString()).to.equal('Hello - codez');
editor.write('Moar stuff');
expect(editor.toString()).to.equal('Hello - codezMoar stuff');
editor.write('Even more');
expect(editor.toString()).to.equal('Hello - codezMoar stuffEven more');
editor.undo();
expect(editor.toString()).to.equal('Hello - codezMoar stuff');
editor.undo();
expect(editor.toString()).to.equal('Hello - codez');
editor.undo();
expect(editor.toString()).to.equal('');
});
xit('allows users to find and replace', () => {
const editor = new Editor();
editor.write('foo stuff');
editor.write(' other foo');
editor.replace('foo', 'bar');
expect(editor.toString()).to.equal('bar stuff other bar');
});
xit('allows undo replaces', () => {
const editor = new Editor();
editor.write('foo stuff');
editor.write(' other foo');
editor.replace('foo', 'bar');
expect(editor.toString()).to.equal('bar stuff other bar');
editor.undo();
expect(editor.toString()).to.equal('foo stuff other foo');
editor.undo();
expect(editor.toString()).to.equal('foo stuff');
});
xit('allows users to redo', () => {
const editor = new Editor();
editor.write('foo stuff');
editor.write(' other foo');
editor.replace('foo', 'bar');
expect(editor.toString()).to.equal('bar stuff other bar');
editor.undo();
expect(editor.toString()).to.equal('foo stuff other foo');
editor.undo();
expect(editor.toString()).to.equal('foo stuff');
editor.redo();
expect(editor.toString()).to.equal('foo stuff other foo');
editor.redo();
expect(editor.toString()).to.equal('bar stuff other bar');
});
});

我写了下面的代码,但我不确定我做错了什么或从哪里开始。有人可以帮忙告诉我测试的内容以及我期望做的事情。 :
class Editor {
constructor (str) {
this.str = str;
}
write(text) {
let newSentence = text + this.str;
console.log('This is the this str', newSentence);
}
toString(){
}
}

答案 0 :(得分:1)
class Editor {
constructor (str) {
this.str = str;
this.states = [""]; //for undo
this.undos = [];
}
write(text) {
this.undos = [];
this.states.push(this.str);
this.str += text;
}
undo(){
this.undos.push(this.str);
this.str = this.states.pop() || "";
}
redo(){
if(this.undos.length){
this.states.push(this.str);
this.str = this.undos.pop();
}
}
replace(a,b){
this.states.push(this.str);
this.str = this.str.split(a).join(b);
}
toString(){
return this.str;
}
}
您需要保留编辑字符串的历史记录......