Как использовать @valid_attributes в блоке before в рельсах 3 и rspec? - PullRequest
0 голосов
/ 12 января 2012

Я пробую разные блоги с примерами Rails 3 и RSpec. Да, это на Windows, поэтому ответ не использует Windows. В этом нет выбора. Идем дальше ...

Я могу запустить спецификацию либо с rspec spec, либо с rake spec: models, так что это выглядит нормально. Однако, если я попытаюсь использовать блок before с атрибутами, он не сможет создать класс Person с этими атрибутами. Остальные тесты просто показывают, что спецификации могут работать.

Сделал модель Person, затем обновил спецификацию

\ MyApp \ Spec \ модели \ 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

Итак, двое из трех прошли просто не тот, у кого есть атрибуты.

Что-нибудь конкретное, что нужно будет настроить для запуска блока before или как атрибуты передаются в тесте с Rails 3?

Также есть ли способ избавиться от этих] 31 м и такие распечатки для каждой линии спецификации?

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 августа 2012

Я должен обновить это с ответом.

Модель Person на самом деле содержала first_name и last_name, но, как отмечалось двумя людьми выше, ошибка, которую я получал, указывала на ActiveRecord, не найдя ее.

В Windows при запуске rake db: migrate два или три раза, в конце концов, это исправили, хотя в модели его не было.

Если вы застряли на Windows dev, это может быть полезно знать!

Я наконец-то смог установить Lubuntu на VirtualBox на Windows 7, и он работал нормально, и с тех порЯ приступил к другим примерам оттуда.

Приветствия

0 голосов
/ 12 января 2012

Из ошибки следует, что ActiveRecord не может найти атрибут: first_name, который вы передаете как часть @valid_attributes.Таким образом, проблема не в том, как вы используете RSpec, а в том, что атрибуты, которые вы ожидаете содержать в допустимой модели.

Убедитесь, что у вас есть поле: first_name или атрибут в модели Person -проверить точное написание (: first_name vs: firstname или какой-либо другой вариант)

...