Другая возможность - найти ваш элемент в dom и проверить значение испускаемого корневого компонента.
import { shallowMount } from '@vue/test-utils'
import MyComponent from './MyComponent.vue'
import SubComponent from './SubComponent.vue'
describe('MyComponent', () => {
it('should emit baz on subcomponent foo', () => {
const wrapper = shallowMount(MyComponent)
const subComponent = wrapper.find(SubComponent)
expect(subComponent.exists()).toBe(true)
expect(wrapper.emitted('baz')).toBeUndefined()
subComponent.vm.$emit('foo', ['hello'])
expect(wrapper.emitted('baz')[0]).toEqual(['hello'])
// or expect(wrapper).toEmit('baz', 'hello') cf. below for toEmit
})
})
Если вы хотите, чтобы пользователь соответствовал Jest:
toEmit(received, eventName, data) {
if (data) {
expect(received.emitted()[eventName][0]).toEqual([data])
} else {
expect(received.emitted()[eventName][0]).toEqual([])
}
return { pass: true }
}
С Perl у вас есть возможности. Один из вариантов - использовать процессы, указанные ниже. Мне нужно узнать, как написать аналогичную программу с использованием потоков, но http://perldoc.perl.org/perlthrtut.html должен дать вам представление.
#!/usr/bin/perl
use strict;
use warnings;
use Parallel::ForkManager;
my @data = (0 .. 19);
my $pm = Parallel::ForkManager->new(4);
for my $n ( @data ) {
my $pid = $pm->start and next;
warn sprintf "%d^3 = %d\n", $n, slow_cube($n);
$pm->finish;
}
sub slow_cube {
my ($n) = @_;
sleep 1;
return $n * $n * $n;
}
__END__
Следующая версия с использованием потоков не использует ограничение на количество создаваемых потоков (потому что я не знаю как):
#!/usr/bin/perl
use strict;
use warnings;
use threads;
my @data = (0 .. 19);
my @threads = map {
threads->new( {context => 'list' }, \&slow_cube, $_ )
} @data;
for my $thr ( @threads ) {
my ( $n, $ncubed ) = $thr->join;
print "$n^3 = $ncubed\n";
}
sub slow_cube {
my ($n) = @_;
sleep 1;
return $n, $n * $n * $n;
}
__END__
Интересно:
TimeThis : Command Line : t.pl
TimeThis : Elapsed Time : 00:00:01.281
Ruby:
Perl:
Also, Perl's threads are native operating system threads, so you can just use those to take advantage of multiple cores.
Ознакомьтесь с Coro , которые предоставляют сопрограммы для Perl.
Вот отрывок из документации авторов ....
Этот набор модулей управляет продолжениями в целом , чаще всего в форме кооперативных потоков (в документации также называемых coros или просто coro). Они похожи на потоки ядра, но (как правило) не выполняются параллельно одновременно даже на машинах SMP. Особый вид потока, предлагаемый этим модулем, также гарантирует вам, что он не будет переключаться между потоками без необходимости в легко определяемых точках вашей программы, поэтому блокировка и параллельный доступ редко являются проблемой, что делает программирование потоков намного безопаснее и проще, чем использование другие модели потоков.
В отличие от так называемых "потоков Perl" (которые на самом деле не являются реальными потоками, а только эмуляцией процессов Windows, перенесенной на unix, и как таковые действуют как процессы), Coro предоставляет полное общее адресное пространство, что упрощает обмен данными между потоками. И потоки Coro также быстрые: отключение кода эмуляции процесса Windows в вашем Perl и использование Coro может легко привести к увеличению скорости ваших программ в два-четыре раза. Тест параллельного умножения матриц выполняется более чем в 300 раз быстрее на одном ядре, чем псевдопотоки Perl на четырехъядерном ядре, использующем все четыре ядра.
Для чего-то похожего на вышеописанное в Ruby, посмотрите Fiber который поставляется с Ruby 1.9.
Вот две интересные статьи об использовании Fiber:
Существует также Fiber для Perl с использованием Coro. Вот несколько статей о Fiber для Perl (на японском языке):