首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

非常奇怪的rails3 rspec (describe) 有关问题: 慎重使用嵌套describe

2012-10-29 
非常奇怪的rails3 rspec (describe)问题: 慎重使用嵌套describe非常奇怪的问题。 也许是自己没有深入看过rs

非常奇怪的rails3 rspec (describe) 问题: 慎重使用嵌套describe
非常奇怪的问题。 也许是自己没有深入看过rspec 文档。  慎重使用 嵌套的describe

今天使用了 gem :  state_machine ( https://github.com/pluginaweek/state_machine)

我的 Gemfile

gem 'rails', '3.2.0'gem "state_machine", "1.1.2"group :development, :test do  gem 'rspec', '2.8.0'  gem 'rspec-rails', '2.8.1'end



在投入开发之前,我写了 单元测试 和对应的实现代码:

spec/models/contract_spec.rb
require 'spec_helper'describe Contract do  # 之前的很多测试用例  describe "state machine" do    it "should transit its state to ready_to_review" do       contract = Contract.new      contract.ready_to_review      contract.state.should == Contract::STATE_READY_TO_REVIEW.to_s    end  endend 


app/models/contract.rb :
class Contract  STATE_CREATED= :created  STATE_READY_TO_REVIEW =:ready_to_review  state_machine :state, :initial => STATE_CREATED do    event :ready_to_review do      transition STATE_CREATED => STATE_READY_TO_REVIEW    end  endend


估计各种修改,DEBUG之下跑了50遍,  contract_spec.rb 还是通不过。  state 总是不对。

但是下面的却可以通过(脱离了rails 环境,直接 ruby state_machine.rb )
require 'rubygems'require 'state_machine'require 'test/unit'class Contract  STATE_CREATED= :created  STATE_READY_TO_REVIEW =:ready_to_review  state_machine :state, :initial => STATE_CREATED do    event :ready_to_review do      transition STATE_CREATED => STATE_READY_TO_REVIEW    end  endendclass ContractTest < Test::Unit::TestCase  def test_should_transition    contract = Contract.new    puts "contract.state: #{contract.state}"    assert contract.state == Contract::STATE_CREATED.to_s    assert contract.can_ready_to_review? == true    result  =contract.ready_to_review    puts "result: #{result}"    puts "contract.state: #{contract.state}"    assert contract.state == Contract::STATE_READY_TO_REVIEW.to_s  endend


后来无语了,休息了一下,突然想到,是不是describe 的问题。 于是把 
describe "state machine" do 
这一行注释掉。 居然就好了! 我无语啊!

require 'spec_helper'describe Contract do  # 注释掉了外层的 describe   #describe "state machine" do  it "should transit its state to ready_to_review" do     contract = Contract.new    contract.ready_to_review    contract.state.should == Contract::STATE_READY_TO_REVIEW.to_s  end  #endend 

热点排行