Очень простой вопрос:Муз аксессоров в Catalyst («Невозможно использовать строку как HASH исх» ошибка)
package MyApp::Model::Foo;
use Moose;
use namespace::autoclean;
extends 'Catalyst::Model';
has 'firstname' => (is => 'ro', isa => 'Str'); # to be populated in config file
# ...
sub check_name {
my $self = shift;
my $firstname = $self->firstname;
# ...
}
Когда я звоню check_name()
из тестового сценария, в строке «$ self-> Firstname» Я получаю ошибку Can't use string ("MyApp::Model::Foo") as a HASH ref while "strict refs" in use at reader MyApp::Model::Foo::firstname
. Как я должен использовать это?
Я не могу воспроизвести тестовый материал, поскольку он слишком обширен, но к тому моменту, когда я запускаю тестовый сценарий, я вызвал сценарий установки, который загружает приложение Catalyst (и, таким образом, считывает конфигурационный файл Catalyst), развертывает и заполняет таблицы базы данных и т. д.
Тест-скрипт отлично работал в исходной версии (что не принимало значения из файла конфигурации, вот что я пытаюсь сделать сейчас, изначально я передал значение) и соответствующий бит просто
my $name_check = MyApp::Model::Foo->check_name();
ok(defined $name_check, "Name is OK");
Пожалуйста, включите тестовый скрипт. Ваше 'check_name' правильно. Что-то еще должно быть неправильно. – simbabque
Похоже, вы могли бы вызывать 'check_name()' как метод класса, а не метод объекта. Но, не увидев вызов 'check_name()', мы не можем быть уверены. Пожалуйста, отредактируйте свой вопрос] (http://stackoverflow.com/posts/40243560/edit), чтобы добавить код, который вызывает 'check_name()'. –
Я тоже думал об этом, но я также думаю, что это может быть связано с тем, что происходит с файлом _config. Потому что в тестовом скрипте не будет плагина ConfigLoader @Dave. – simbabque