Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 4 Rails—测试使用从属复制的模型_Ruby On Rails 4_Rspec - Fatal编程技术网

Ruby on rails 4 Rails—测试使用从属复制的模型

Ruby on rails 4 Rails—测试使用从属复制的模型,ruby-on-rails-4,rspec,Ruby On Rails 4,Rspec,我是RSpec的新手,我相信有一种更简单的方法来做我想做的事情: 我想测试我的一个模型——“userstatus.rb”。 每个测试在一个事务中运行。 所以我定义: config.use_transactional_fixtures = true 我写了一些在每次测试之前运行的东西: describe "UsersStatuses" , type: :model, :focus => true do before(:each) do UsersStatuses.

我是RSpec的新手,我相信有一种更简单的方法来做我想做的事情:

我想测试我的一个模型——“userstatus.rb”。 每个测试在一个事务中运行。 所以我定义:

config.use_transactional_fixtures = true
我写了一些在每次测试之前运行的东西:

describe "UsersStatuses" , type: :model, :focus => true do 
    before(:each) do
        UsersStatuses.delete_all
        user_status = UserStatus.new()
        user_status.save
    end
我在“之前”之后写了测试(在描述中):

UserStatus中的func方法是:

def func
    return using(:slave).connection.select_rows("SELECT id FROM user_statuses")
end
当我运行测试时,它失败了。 据我所见,func返回的行与我在“before”部分中删除它们之前的数据相同。 但是,当我在use\u transactional\u fixtures=false时运行测试时,它可以工作(保存'before'中的数据,并在func中返回)

我的猜测是,在事务模式下,user_status.save发生在'before'中,它提交给DB,也提交给从属服务器。 因此,在“before”中所做的任何更改都将应用于从属,func将返回它所需的内容。 但我不确定


有什么方法可以将更改应用到slave上吗?

据我所见,RSpec不能很好地与Shared(在八达通gem中)一起工作

我重写了Octopus::Model::SharedMethods下的“using”方法

因此,如果在我的代码中的任何一点我使用using(:slave),它将调用我的'using' 并且:奴隶碎片将被使用。所有“更改”都将在master中进行,并在测试结束时回滚

新功能:

module Octopus
    module Model
        module SharedMethods
            def using(shard)
                return self
            end
        end
    end
end

不确定这是你的帖子还是你的代码中的拼写错误,但是你有
除了
而不是
期望
@paul法语拼写错误,谢谢!但我还是有问题。B.T.W,使用(:从)是来自八达通宝石。
module Octopus
    module Model
        module SharedMethods
            def using(shard)
                return self
            end
        end
    end
end