RSpec 的未定义方法“its”(Hartl 在 Rails 教程中的 Ruby)
undefined method `its' for RSpec (Hartl's Ruby on Rails Tutorial)
我正在阅读 Michael Hartl 的 RoR 教程第 8 章,但遇到了问题。测试失败,因为 RSpec 的 "its" 方法是 "undefined"。你遇到过类似的事情吗?可能是什么原因?我都检查过了,和书上的一样...
这是我来自 user_spec.rb 的测试代码:
describe User do
before { @user = User.new(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar") }
subject { @user }
describe "remember token" do
before { @user.save }
its(:remember_token) { should_not be_blank }
end
...
...
测试结果 运行,它说:RSpec::ExampleGroups::User::RememberToken:Class 的未定义方法`its' (NoMethodError):
MBP:sample_app smi$ bundle exec rspec spec
/Users/smi/projects/sample_app/spec/models/user_spec.rb:12:in `block (2 levels) in <top (required)>': **undefined method `its' for RSpec::ExampleGroups::User::RememberToken:Class (NoMethodError)**
from /Users/smi/.rvm/gems/ruby-2.0.0-p594/gems/rspec-core-3.1.7/lib/rspec/core/example_group.rb:325:in `module_exec'
from /Users/smi/.rvm/gems/ruby-2.0.0-p594/gems/rspec-core-3.1.7/lib/rspec/core/example_group.rb:325:in `subclass'
from /Users/smi/.rvm/gems/ruby-2.0.0-p594/gems/rspec-core-3.1.7/lib/rspec/core/example_group.rb:219:in `block in define_example_group_method'
from /Users/smi/projects/sample_app/spec/models/user_spec.rb:10:in `block in <top (required)>'
from /Users/smi/.rvm/gems/ruby-2.0.0-p594/gems/rspec-core-3.1.7/lib/rspec/core/example_group.rb:325:in `module_exec'
from /Users/smi/.rvm/g.................
你把下面的写成:
its(:remember_token) { should_not be_blank }
作为
expect(subject.remember_token).not_to be_blank
阅读 its
isn't core to RSpec and Arguments passed to its 讨论。因为你使用的是 Rspec >= 3.0,所以你得到了错误。因为在此版本或更高版本中 its
不是 Rspec 核心的一部分。
您可以查看 Rspec 的当前 One-liner syntax。
您需要安装 gem 'rspec-its'
- 它提供了 its 方法作为指定属性预期值的简写方法。
我正在阅读 Michael Hartl 的 RoR 教程第 8 章,但遇到了问题。测试失败,因为 RSpec 的 "its" 方法是 "undefined"。你遇到过类似的事情吗?可能是什么原因?我都检查过了,和书上的一样...
这是我来自 user_spec.rb 的测试代码:
describe User do
before { @user = User.new(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar") }
subject { @user }
describe "remember token" do
before { @user.save }
its(:remember_token) { should_not be_blank }
end
...
...
测试结果 运行,它说:RSpec::ExampleGroups::User::RememberToken:Class 的未定义方法`its' (NoMethodError):
MBP:sample_app smi$ bundle exec rspec spec
/Users/smi/projects/sample_app/spec/models/user_spec.rb:12:in `block (2 levels) in <top (required)>': **undefined method `its' for RSpec::ExampleGroups::User::RememberToken:Class (NoMethodError)**
from /Users/smi/.rvm/gems/ruby-2.0.0-p594/gems/rspec-core-3.1.7/lib/rspec/core/example_group.rb:325:in `module_exec'
from /Users/smi/.rvm/gems/ruby-2.0.0-p594/gems/rspec-core-3.1.7/lib/rspec/core/example_group.rb:325:in `subclass'
from /Users/smi/.rvm/gems/ruby-2.0.0-p594/gems/rspec-core-3.1.7/lib/rspec/core/example_group.rb:219:in `block in define_example_group_method'
from /Users/smi/projects/sample_app/spec/models/user_spec.rb:10:in `block in <top (required)>'
from /Users/smi/.rvm/gems/ruby-2.0.0-p594/gems/rspec-core-3.1.7/lib/rspec/core/example_group.rb:325:in `module_exec'
from /Users/smi/.rvm/g.................
你把下面的写成:
its(:remember_token) { should_not be_blank }
作为
expect(subject.remember_token).not_to be_blank
阅读 its
isn't core to RSpec and Arguments passed to its 讨论。因为你使用的是 Rspec >= 3.0,所以你得到了错误。因为在此版本或更高版本中 its
不是 Rspec 核心的一部分。
您可以查看 Rspec 的当前 One-liner syntax。
您需要安装 gem 'rspec-its'
- 它提供了 its 方法作为指定属性预期值的简写方法。