gpt4 book ai didi

ruby-on-rails - Rspec:升级到 Rails 4 后,事务性固定装置不起作用

转载 作者:行者123 更新时间:2023-12-04 02:24:56 25 4
gpt4 key购买 nike

我在 spec_helper.rb 中设置了以下行

config.use_transactional_fixtures = true

这意味着每个测试都应该在自己之后进行清理。一个测试所做的任何数据库更新都不应该在下一个测试中出现。

我的一个规范文件中有两个测试。
it 'should update the DB' do
Setting.put('abcd', 'efgh')
end

it 'should not find the DB update' do
Setting.get('abcd').should be_nil
end

以上两个测试用于 Rails 3.2.14

但是升级到 Rails 4 后,第二次测试失败并出现以下错误,
------
expected: nil
got: "efgh"
-----

由于这个问题,我在套件中有大约 100 个测试失败。

我能找到的 Rails 4 升级的唯一相关文档非常模糊:
“Rails 4.0 已弃用 ActiveRecord::Fixtures 以支持 ActiveRecord::FixtureSet。”

我不确定这是否/如何相关。理想情况下,我希望有一个全局设置(config.use_transactional_fixtures = true),而不必更改测试的逻辑(或添加额外的 before(:each)/after(:each) 模块只是为了让现有测试通过。 请帮忙!

最佳答案

我不确定,这是同样的问题。但对我来说,解决方案是 - 仅在“它”执行/结束 block 中创建数据。如果你在上下文中创建数据,它就不起作用。

那行得通:

    context "with array of both exista and non exist words" do

clean_words = ["foo", "bar", "foobar"]

language = "eng"
it "return array of word, that exist in Word class" do
word = FactoryGirl.create(:word)
word2 = FactoryGirl.create(:word, name: "bar")
exist_words = [word, word2]
expect(Word.generate_list_of_exist_words(clean_words, language).sort).to eq exist_words.sort

end
end

那行不通:
    context "with array of both exista and non exist words" do

clean_words = ["foo", "bar", "foobar"]
word = FactoryGirl.create(:word)
word2 = FactoryGirl.create(:word, name: "bar")
exist_words = [word, word2]
language = "eng"
it "return array of word, that exist in Word class" do

expect(Word.generate_list_of_exist_words(clean_words, language).sort).to eq exist_words.sort

end
end

关于ruby-on-rails - Rspec:升级到 Rails 4 后,事务性固定装置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22080355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com