参考错误,未定义魔术。但这是在测试参数中定义的吗?

时间:2019-07-16 22:40:59

标签: javascript object prototype

我正在研究这个kata:https://www.codewars.com/kata/magic-the-gathering-number-3-spell-stack/train/javascript

在运行示例测试时会引发此错误:

ReferenceError: Magic is not defined
    at /home/codewarrior/index.js:7:1
    at Object.handleError
        <anonymous>

我研究了原型的工作方式,并且我的代码似乎是正确的。

到目前为止,这是我的代码:

// Create the Magic object with a spellStack method
// Happy Casting!
Magic.prototype.spellStack = (card) => {
  console.log(card);
}

和测试参数是这样的:

  Test.describe("It should add and remove spells on the stack", function() {
  let spells = [{'name':'Lightning Bolt', 'type': 'instant'}, {'name': 'Giant Growth', 'type': 'instant'},
                {'name':'Time Walk', 'type': 'sorcery'}, {'name': 'Ponder', 'type': 'sorcery'}]; 
  var myMagic = new Magic();

  Test.assertSimilar(myMagic.spellStack(spells[2]), 1);
  Test.assertSimilar(myMagic.spellStack(spells[0]), 2);
  Test.assertSimilar(myMagic.spellStack(spells[0]), 3);
  Test.assertSimilar(myMagic.spellStack(spells[1]), 4);
  Test.assertSimilar(myMagic.spellStack(), spells[1]);
  Test.assertSimilar(myMagic.spellStack(), spells[0]);
  Test.assertSimilar(myMagic.spellStack(), spells[0]);

  Test.it("Should throw an error if trying to add a sorcery to a stack with spells:", function() {
    Test.expectError(()=>myMagic.spellStack(spells[3]));
    Test.expectError(()=>myMagic.spellStack(spells[2]));
  });

  Test.it("Should throw an error if trying to retrieve a spell when the stack is empty:", function() {
    Test.assertSimilar(myMagic.spellStack(), spells[2], "Removing the last spell from the stack");
    Test.expectError(()=>myMagic.spellStack());
  });
});

至少它应该给出一个错误,但同时也要控制输入的功能。

1 个答案:

答案 0 :(得分:1)

在此行

Magic.prototype.spellStack = (card) => {

您要在原型上设置属性,但是Magic在哪里定义? Magic还不存在。

您需要先定义它

function Magic() {}
Magic.prototype.spellStack = (card) => {
    console.log(card);
}