`
sg552
  • 浏览: 620027 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
47437293-94b9-3b04-9152-8971c7580049
白手起家学习使用Flex
浏览量:18709
社区版块
存档分类
最新评论

非常奇怪的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
  end
end 


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
  end
end


估计各种修改,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
  end
end

class 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
  end
end


后来无语了,休息了一下,突然想到,是不是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
  #end
end 

分享到:
评论

相关推荐

    使用RSpec 测试Rails 程序.pdf

    4. **生成器**:使用`rails generate rspec:install`命令来初始化RSpec,并创建必要的目录结构和初始文件。 #### 三、模型测试 - **分析模型测试**:了解模型的基本结构,包括属性、关联关系、验证规则等。 - **...

    jasper-rails-rspec

    依赖关系 安装 gem install jasper-rails-rspec配置将jasper-rails-rspec添加到您的 Gemfile 中: gem "jasper-rails-rspec"使用 jasper-rails-rspec require 'spec_helper'describe PeopleController dodescribe ...

    rspec-course:rscpec-课程-udemy

    《rspec-course: rspec-课程-udemy》是一门专注于Ruby编程语言的测试驱动开发(TDD)课程,特别强调了使用RSpec这个强大的测试框架。这门课程旨在帮助开发者掌握如何利用RSpec进行高效的代码测试,确保软件的质量和...

    The.RSpec.Book

    - **第三方库**:除了RSpec本身之外,还有许多第三方库可以增强RSpec的功能,例如RSpec-Rails、RSpec-Mocks等。 #### 总结 RSpec 不仅是一种测试框架,也是一种开发哲学。通过RSpec,开发人员可以更清晰地表达他们...

    rspec测试.pdf

    在实际开发中,RSpec被广泛应用于Web应用程序的测试,特别是在使用Ruby on Rails框架时。RSpec能够帮助开发者快速构建出可靠且可维护的测试套件,确保代码的质量和稳定性。此外,RSpec还支持多种类型的测试,包括...

    ammeter:一个让您编写Rails 3生成器规范的宝石

    一颗让您轻松编写Rails 3 Generators规格的宝石。 RSpec的使用电流表,我们认为你会发现它有用的。 用于测量电流,发电机可以产生电流。 安装 将此行添加到您的Gemfile(或gemspec)中: gem 'ammeter' 然后...

    multiple-modules-with-guard:示例显示如何在具有单独测试套件的模块的项目中使用 spring 设置 guard-rspec

    创建此项目的步骤:开始从头开始的新 Rails 项目rails new multiple-modules-with-guard 规格将rspec-rails添加到Gemfile group :test , :development do gem 'rspec-rails'end rails generate rspec:install 请注意...

    The RSpec Book

    - **RSpec Rails**:对于使用 Rails 框架的项目,RSpec Rails 是一个扩展库,它提供了针对 Rails 应用程序的专用匹配器和上下文。 #### 五、RSpec 社区与贡献者 - **David Chelimsky**:RSpec 的主要作者之一,他...

    RSepc rails 测试框架介绍

    创建测试代码时,当使用 Rails 的 `scaffold` 生成器时,RSpec 会自动生成相应的测试代码到 `spec` 目录下。如果需要为视图、助手等创建测试,可以直接在相应目录下创建 `.spec.rb` 文件。 执行测试用例,只需要在...

    RSpec 讓你愛上寫測試

    RSpec 提供了一組流暢的 API,允許開發者使用簡單的英語詞句來描述測試,例如 `describe`, `context`, `it` 和 `expect` 等方法。這樣的做法使得測試讀起來就像人類語言一樣自然。 ##### 特點 - **易讀性**:RSpec...

    mongoid-rspec:Mongoid的RSpec匹配器和宏

    mongoid-rspec库提供了RSpec兼容匹配器的集合,这些匹配器有助于测试Mongoid文档。 安装 将此行放入您的Gemfile中: group :test do gem 'mongoid-rspec' end 兼容性 该宝石与Mongoid 3、4、5、6和7兼容。 组态 ...

    使用rails6开发纯后端API项目.zip

    使用Rails 6创建一个新的API项目非常简单,只需在命令行输入: ``` rails new my_api --api ``` `--api`标志会创建一个精简版的Rails应用,移除了不必要的视图、资产管道和Sprockets,专注于处理HTTP请求和响应...

    ruby on rails 实例代码

    TDD(Test-Driven Development)是另一种编程实践,在Rails中,我们可以使用Rspec和FactoryBot等工具进行测试驱动开发。先编写测试用例,再编写满足这些测试的代码,确保了代码的质量和可维护性。例如,为了测试用户...

    行为驱动设计: Professional Ruby on Rails - Chapter 7

    2. **编写特性文件(Feature Files)**:使用Gherkin语法,编写特性文件描述用户故事。每个特性文件由一个或多个场景(Scenarios)组成,场景又由一系列步骤(Given, When, Then)构成,清晰地定义了预期的行为。 3...

    apivore:根据端点,模型和查询参数的Swagger描述测试rails API

    当前支持并针对OpenAPI 2.0进行验证(请参阅 )安装要使用Apivore,请将以下内容添加到您的Gemfile中: gem 'apivore'警告:如果apivore在rspec上方的Gemfile中列出,则某些问题,尤其是NameError: uninitialized ...

    greengrocer_RSpec3

    在大型项目中,测试可能会变得复杂,RSpec3允许我们使用`context`关键字来组织和分组测试,以提高可读性。例如: ```ruby describe Greengrocer do context 'with discount' do it 'applies a discount to prices...

    pludoni_rspec:我们在项目中常用的所有测试助手的集合

    普洛多尼 pludoni GmbH的RSpec助手,用于现代Rails应用程序(+5.1,RSpec&gt; 3.5) 只需将其包含在您的spec_helper / rails_helper中ENV [ "RAILS_ENV" ] ||= 'test'require 'pludoni_rspec'PludoniRspec . run 怎么做...

    rspec-cucumber-start:知道如何使用 Cucumber 和 rspec 测试纯 Ruby 应用程序!

    运行测试,使用`bundle exec cucumber`执行Cucumber测试,`bundle exec rspec`执行RSpec测试。通过这种方式,你可以确保整个应用程序从用户界面到内部逻辑都得到了充分的验证。 总的来说,Cucumber和RSpec是Ruby...

    bookhouse_tdd:使用rspec在Ruby上构建的商店项目

    2. **RSpec**: 学习RSpec的基本用法,如`describe`、`it`、`before`、`expect`等关键字,以及如何编写模拟对象(mocks和stubs)和期望。 3. **Test-Driven Development (TDD)**: 理解TDD的原则,包括先写失败的测试...

    rspec-query-limit

    用于 Rails 查询计数器的 Rspec 自定义匹配器 特征 防止N+1问题 安装 将此行添加到应用程序的 Gemfile 中: gem 'rspec-query-limit' 然后执行: $ bundle 支持 rspec 版本 2 和 3 用法 添加到您的spec/spec_...

Global site tag (gtag.js) - Google Analytics