Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 运行rspec时空表上的SQLite约束异常_Ruby On Rails_Ruby On Rails 3_Sqlite_Rspec - Fatal编程技术网

Ruby on rails 运行rspec时空表上的SQLite约束异常

Ruby on rails 运行rspec时空表上的SQLite约束异常,ruby-on-rails,ruby-on-rails-3,sqlite,rspec,Ruby On Rails,Ruby On Rails 3,Sqlite,Rspec,我的Rspec测试套件有一个奇怪的问题。将数据插入具有唯一约束的表的所有测试均失败。通过指定行号单独运行失败的测试,效果与预期一致 为了调查这个问题,我在插入导致约束异常的数据之前打印了该表中的行数,它报告该表为空 在任何文件中,都不存在before:all 我使用的是DatabaseCleaner,除了这个问题,看起来清理工作正在进行 例如,在运行整个文件时,此选项不起作用: describe User # ... describe '#follow_location' do

我的Rspec测试套件有一个奇怪的问题。将数据插入具有唯一约束的表的所有测试均失败。通过指定行号单独运行失败的测试,效果与预期一致

为了调查这个问题,我在插入导致约束异常的数据之前打印了该表中的行数,它报告该表为空

在任何文件中,都不存在before:all

我使用的是DatabaseCleaner,除了这个问题,看起来清理工作正在进行

例如,在运行整个文件时,此选项不起作用:

describe User

  # ...

  describe '#follow_location' do
    let(:user) { Factory(:user) }
    let(:location) { Factory(:location) }

    it 'should raise when trying to follow an already followed location' do
      puts LocationFollowship.count  # => 0
      user.followed_locations << location  # exception raised
      lambda {
        user.follow_location location
      }.should raise_error User::AlreadyFollowingLocation
    end
  end

  # …

end
描述用户
# ...
描述“跟随位置”做什么
let(:user){Factory(:user)}
let(:位置){Factory(:位置)}
它“在尝试跟踪已跟踪的位置时应引发”do
放置位置followship.count#=>0

user.u位置我也有这个问题。此外,当我试图研究Ruby解释器时,它会在某些情况下出错(可能是由SQLite引起的)

我声明了一个唯一索引,如下所示:

add_index(:table, [:column1, :column2], unique: true)
将以下唯一性约束添加到模型中(除了迁移中的现有索引之外)会消除该问题:

validates_uniqueness_of :column1, scope: :column2

你能带我们看看你的工厂吗?:)也许你添加了一个id字段,他们根本没有设置任何显式id。