gpt4 book ai didi

ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试?

转载 作者:数据小太阳 更新时间:2023-10-29 07:13:49 25 4
gpt4 key购买 nike

我正在编写一个包含 C 扩展的 gem。通常当我写一个 gem 时,我会遵循 TDD 的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......

在“ext/mygem/mygem.c”中我的 C 扩展和在 gemspec 的“扩展”中配置的有效 extconf.rb,如何运行我的规范并仍然加载我的 C 扩展?当我更改 C 代码时,我需要采取哪些步骤来重新编译代码?

这可能是个愚蠢的问题,但是从我的 gem 的开发源代码树中输入“bundle install”不会构建任何 native 扩展。当我手动运行 ruby ext/mygem/extconf.rb 时,我确实得到了一个 Makefile(在整个项目的根目录中),然后当我运行 make 时,我确实得到了一个共享对象(同样,在整个项目的根目录中)。我一定是遵循了错误的工作流程,因为我知道 .so 应该放在 lib/下。除非我只是应该在开发过程中手动执行此操作?

最佳答案

不知道这是否是“正确”的方式,但我过去这样做的方式是

添加

$: << File.dirname(__FILE__) + '/../ext'

致我的规范助手

然后有一个看起来像

的rakefile
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new('spec')
task :build do
Dir.chdir('ext') do
output = `ruby extconf.rb`
raise output unless $? == 0
output = `make`
raise output unless $? == 0
end
end

task :spec => :build

因此 rake spec 每次都为我构建 c 代码,构建的库存在于 ext/中。对加载路径的更改可确保加载此副本。这github repo说明了这一点。

关于ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944522/

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