【发布时间】:2014-01-01 14:43:57
【问题描述】:
我正在关注 Michael Hartl 的 Ruby on Rails Tutorial。我已经完成了教程,但是现在当我尝试运行命令时
bundle exec rspec spec/
我得到一大堆 Encoding::UndefinedConversionErrors。这是一个例子:
101) Authentication AuthenticationPages signin with valid information followed by signout
Failure/Error: let(:user) { FactoryGirl.create(:user) }
ActiveRecord::StatementInvalid:
Encoding::UndefinedConversionError: "\xDC" from ASCII-8BIT to UTF-8: INSERT INTO "users" ("created_at", "email", "name", "password_digest", "remember_token", "updated_at") VALUES (?, ?, ?, ?, ?, ?)
# ./spec/requests/authentication_pages_spec.rb:33:in `block (5 levels) in <top (required)>'
# ./spec/requests/authentication_pages_spec.rb:34:in `block (5 levels) in <top (required)>'
我在 Stack Overflow 上搜索过类似的问题,但问题涉及文件 I/O,因此那里的解决方案并不真正适用于我的问题。我在运行 rspec 后阅读了一些 test.log 文件,我得到一个提示,它可能与我的数据上传到服务器的方式有关,那里发生了某种奇怪的转换错误。
这是我在 database.yml 中定义我的测试数据库的内容:
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
encoding: UTF8
我正在运行 Rails 4.0.0、Ruby 2.0.0 并使用 sqlite3 数据库。我在 Gemfile 中的 sqlite gem 是:gem 'sqlite3', '1.3.8'。我的 Gemfile for rspec 中的 gem 如下:gem 'rspec-rails', '2.13.1'.
基本上,我试图弄清楚为什么会发生这些错误以及如何使它们停止发生,但我也不太确定。
编辑:这是我的 factory.rb 文件的内容:
#encoding: utf-8
FactoryGirl.define do
factory :user do
sequence(:name) { |n| "Person #{n}" }
sequence(:email) { |n| "person_#{n}@example.com" }
password "foobar"
password_confirmation"foobar"
factory :admin do
admin true
end
end
factory :micropost do
content "Lorem ipsum"
user
end
end
我还注意到我的 development.sqlite3 和 test.sqlite3 中有一些 ASCII 字符。使用 Notepad++,我尝试将文档重新编码为 UTF-8,但随后出现错误,需要我重置并重新迁移我的数据库。在我做完所有这些之后,开发和测试 SQLITE3 文件又回到了包含 ASCII 字符的状态。我不确定这是否与此有关。
【问题讨论】:
-
自您上次成功运行测试以来,您的环境发生了什么变化?
-
不确定这有多大帮助,但这里是两个 Git 分支之间的比较,一个“注册”是测试工作的最后一个分支。新的“sing-in-out”是当事情停止工作时。 github.com/taro-tsujimoto/sample-app/compare/…除此之外,据我所知,我的开发环境没有太大变化。
-
看起来你添加了引导 gem。其他宝石是否因此(或任何其他原因)而改变?
-
你的数据库“有字符”是什么意思。您是指数据库中一些现有记录的内容吗?如果是这样,在您“重置”它之后,这些字符是如何重新出现在测试数据库中的?您是否正在运行一些任务来预填充数据库?还有,“编辑文档”和数据库有什么关系?
标签: ruby-on-rails ruby rspec sqlite