2014-11-23 79 views
0

这里是我的课Rspec测试中未定义的局部变量或方法?

class Hero 
    attr_reader :strength, :health, :actions 

    def initialize(attr = {}) 
    @strength = attr.fetch(:strength, 3) 
    @health = attr.fetch(:health, 10) 
    @actions = attr.fetch(:actions, {}) 

    @dicepool = attr.fetch(:dicepool) 
    end 

    def attack(monster) 
    @dicepool.skill_check(strength, monster.toughness) 
    end 

end 

这些都是我的测试

require 'spec_helper' 
require_relative '../../lib/hero' 

describe Hero do 
    let(:dicepool) {double("dicepool")} 

    describe "def attributes" do 
    let(:hero){Hero.new dicepool: dicepool} 

    it "has default strength equal to 3" do 
     expect(hero.strength).to eq(3) 
    end 
    it "has default health equal to 10" do 
     expect(hero.health).to eq(10) 
    end 

    it "can be initialized with custom strength" do 
     hero = Hero.new strength: 3, dicepool: dicepool 
     expect(hero.strength).to eq(3) 
    end 

    it "can be initialized with custom health" do 
     hero = Hero.new health: 8, dicepool: dicepool 
     expect(hero.health).to eq(8) 
    end 

    describe "attack actions" do 
     let(:attack_action) {double("attack_action") } 
     let(:hero) {Hero.new dicepool: double("dicepool"), actions: {attack: attack_action} } 

     it "has attack action" 
     expect(hero.actions[:attack]).to eq(attack_action) 
     end 
    end 


end 

我一直在'块(3级)在获得

“:未定义的局部变量或方法”的英雄'for RSpec :: ExampleGroups :: Hero :: DefAttributes :: AttackActions:Class(NameError)

我不知道为什么。这是我的写作Rspec的测试,所以请漂亮的第一天......

回答

0

你在你的最后一次测试有一个错字,你忘了词do:通行证添加一次

it "has attack action" do 
    expect(hero.actions[:attack]).to eq(attack_action) 
    end 

一切。

0

您没有将方法传递给it方法(最后缺少doend)。

it "has attack action" 
         ^^^ 

正确的代码应该是这样的:

describe Hero do 
    let(:dicepool) {double("dicepool")} 

    describe "def attributes" do 
    let(:hero){Hero.new dicepool: dicepool} 

    it "has default strength equal to 3" do 
     expect(hero.strength).to eq(3) 
    end 
    it "has default health equal to 10" do 
     expect(hero.health).to eq(10) 
    end 

    it "can be initialized with custom strength" do 
     hero = Hero.new strength: 3, dicepool: dicepool 
     expect(hero.strength).to eq(3) 
    end 

    it "can be initialized with custom health" do 
     hero = Hero.new health: 8, dicepool: dicepool 
     expect(hero.health).to eq(8) 
    end 

    describe "attack actions" do 
     let(:attack_action) {double("attack_action") } 
     let(:hero) {Hero.new dicepool: double("dicepool"), actions: {attack: attack_action} } 

     it "has attack action" do 
     expect(hero.actions[:attack]).to eq(attack_action) 
     end 
    end 
    end 
end 
相关问题