2

我有一个小的 Rails 应用程序,我最初使用的是 sqlite3,然后决定切换到 mysql。切换后,我的一个 rspec 测试失败了,但我不知道为什么(使用 sqlite3 时它工作正常,并且通过实际页面检查功能似乎工作正常)。

我的测试如下:

before(:each) do
    @a = FactoryGirl.create(:a)
    @b = FactoryGirl.create(:b)
    @relationship = @a.connector.build( :b_id => @b)
    @relationship.save
end

测试1:

it "should have the right b" do
    @relationship.b.should == @b
end

测试 2:

it "should have the right a" do
    @relationship.a.should == @a
end

在我的测试中,测试 1 失败,而使用 mysql 时测试 2 成功通过(使用 sqlite3 时的两个路径)。据我所知,如果我只是切换数据库,我不应该要求对测试本身进行任何更改,那么任何人都可以判断我是否做错了什么?或者如果我需要添加一些东西来刷新数据库?

在相关说明中,在 rspec 测试本身中调试问题的推荐方法是什么,尤其是在实际开发工作但测试失败的情况下?(我使用的是 Rails 3.1 和 rspec-rails 2.10.1)。

提前感谢您的任何意见,

问候,

4

1 回答 1

0

我最近遇到了这个问题;问题是由我的模型中的错误缓存行为引起的。

在第一个规范中,我缓存了第一个对象,它是使用 ID 1 创建的。当为第二个规范重新创建时,该对象在 SQLite3 上以 ID 1 创建,在 MySQL 上以 ID 2 创建。

因此,缓存行为在 SQLite3 上测试时是幸运的,而在 MySQL 上一直失败。

于 2013-06-25T06:07:53.080 回答