ActiveRecord :: Migration辅助方法的规范

时间:2012-11-25 10:46:39

标签: ruby-on-rails activerecord rspec migration

我在monetizedemonetizeActiveRecord::Migration内添加了ActiveRecord::ConnectionAdapters::TableDefinitionActiveRecord::ConnectionAdapters::Table个助手{。{3}}。

that pull request显示了用法示例。因此,您将了解发明的变化。 (它有效)

但我不知道如何测试我的助手。我可以用什么方式为它们编写规格?我在spec文件中编写迁移并手动运行它的所有尝试都失败了。迁移手动运行没有更改表(或者我无法检测到更改)并且没有抛出任何异常。

我的尝试示例:

describe 'monetize' do
  class MonetizeMigration < ActiveRecord::Migration
    def change
      create_table :items
      monetize :items, :price
    end
  end

  class Item < ActiveRecord::Base; end

  it 'should monetize items' do
    MonetizeMigration.up    #=> nil
    Item                    #=> Item(has no table)
  end
end  

2 个答案:

答案 0 :(得分:1)

这在控制台中对我有用:

[4667]foo@bar:~/dev/ror/foo$ rails c
Loading development environment (Rails 3.2.9)
irb(main):001:0> class MyMigration   def change
irb(main):003:2>   create_table :foo
irb(main):004:2>  end
irb(main):005:1> end
=> nil
irb(main):006:0> MyMigration.new.change
-- create_table(:foo)
   (4.5ms)  select sqlite_version(*)
   (133.2ms)  CREATE TABLE "foo" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL) 
   -> 0.2362s
=> []

答案 1 :(得分:0)

您可以直接在数据库连接上执行任何迁移帮助程序方法:

ActiveRecord::Base.connection.create_table :items

感谢@happy_user在第一次尝试中显示我的错误。我想有人可能会在将来使用我的最新解决方案,所以我会留在这里。