我正在尝试使用Rails 3和RSpec的不同博客。是的,它在Windows上,所以答案不是没有使用Windows。别无选择。继续......
我可以使用rspec spec或rake spec:models运行规范,这样看起来很好。但是,如果我尝试使用带有属性的before块,则在创建具有这些属性的Person类时会失败。其他测试只是显示规格可以运行。
制作人物模型,然后更新规范
\ MYAPP \规格\模型\ person_spec.rb
require 'spec_helper'
describe Person do
before(:each) do
@valid_attributes = {
:first_name => "Foo",
:last_name => "Bar"
}
end
it "should create a new instance given valid attributes" do
Person.create!(@valid_attributes)
end
it "can be instantiated" do
Person.new.should be_an_instance_of(Person)
end
it "can be saved successfully" do
Person.create.should be_persisted
end
#pending "add some examples to (or delete) #{__FILE__}"
end
这是rake spec:models命令
的输出C:\Users\laptop\Documents\Sites\myapp>rake spec:models
C:/Ruby193/bin/ruby.exe -S rspec ./spec/models/person_spec.rb
Person
←[31m should create a new instance given valid attributes (FAILED - 1)←[0m
←[32m can be instantiated←[0m
←[32m can be saved successfully←[0m
Failures:
1) Person should create a new instance given valid attributes
←[31mFailure/Error:←[0m ←[31mPerson.create!(@valid_attributes)←[0m
←[31mActiveRecord::UnknownAttributeError:←[0m
←[31munknown attribute: first_name←[0m
←[36m # ./spec/models/person_spec.rb:13:in `block (2 levels) in <top (required)>'←[0m
Finished in 0.074 seconds
←[31m3 examples, 1 failure←[0m
Failed examples:
←[31mrspec ./spec/models/person_spec.rb:12←[0m ←[36m# Person should create a new instance given valid attributes←[0m
rake aborted!
C:/Ruby193/bin/ruby.exe -S rspec ./spec/models/person_spec.rb failed
因此,有三分之二通过了没有属性的那个。
特别需要为之前的块运行设置或者在Rails 3的测试中如何传递属性?
还有办法摆脱那些31米和每个规格线的打印输出吗?
由于
答案 0 :(得分:0)
从错误中可以看出,ActiveRecord无法找到属性:first_name,它是作为@valid_attributes的一部分传递的。也就是说,问题不在于您如何使用RSpec,而在于您希望包含有效模型的属性。
检查Person模型上是否有:first_name字段或属性 - 并验证确切的拼写(:first_name vs:firstname或其他一些变体)
答案 1 :(得分:0)
我应该用答案更新这个。
Person模型确实包含first_name和last_name,但正如我收到的错误上面的两个人所指出的那样,指向ActiveRecord没有找到它。
在Windows中,运行rake db:migrate两次或三次最终修复它,即使它在模型中没有丢失。
如果你被困在Windows开发者身上,这可能是一件好事!
我终于能够将Lubuntu放在Windows 7上的VirtualBox上,并且运行正常,从那时起我就开始了其他的例子。
干杯