Тестирование контроллера RSpec - очищает response.body

SYS_GUID возвращает GUID - глобально уникальный идентификатор. SYS_GUID является RAW(16). Он не генерирует увеличивающееся числовое значение.

Если вы хотите создать увеличивающийся цифровой ключ, вам нужно будет создать последовательность.

CREATE SEQUENCE name_of_sequence
  START WITH 1
  INCREMENT BY 1
  CACHE 100;

Затем вы должны либо использовать эту последовательность в своем выражении INSERT

INSERT INTO name_of_table( primary_key_column, <> )
  VALUES( name_of_sequence.nextval, <> );

Или вы можете определить триггер, который автоматически заполняет значение первичного ключа, используя последовательность

CREATE OR REPLACE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  SELECT name_of_sequence.nextval
    INTO :new.primary_key_column
    FROM dual;
END;

Если вы используете Oracle 11.1 или новее, вы можете немного упростить триггер

CREATE OR REPLACE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  :new.primary_key_column := name_of_sequence.nextval;
END;

Если вы действительно хотите использовать SYS_GUID

CREATE TABLE table_name (
  primary_key_column raw(16) default sys_guid() primary key,
  <>
)

97
задан Toms Mikoss 30 June 2009 в 11:00
поделиться

1 ответ

По умолчанию rspec-rails взламывает Rails, чтобы предотвратить фактическую визуализацию шаблонов представлений. Вам следует проверять только поведение ваших действий и фильтровать тесты вашего контроллера, а не результат рендеринга шаблона - для этого нужны спецификации представления.

Однако, если вы хотите, чтобы спецификации вашего контроллера отображали шаблоны, как обычно это делает приложение, используйте директиву render_views :

describe YourController do
  render_views
  ...
end
183
ответ дан 24 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: