用方法写一个类

时间:2017-06-18 20:38:20

标签: javascript class methods

我正在尝试编写一个包含一些方法的类。而且我不确定我做错了什么。

为了创建这个类,我需要进行以下测试:



'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(){
  
  }
}




1 个答案:

答案 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;
  }
}

您需要保留编辑字符串的历史记录......