我在PHP中使用Mockery模拟接口时遇到了一个问题(我正在使用laravel框架,但我不确定这是否相关.
我已经定义了一个接口
<?php namespace MyNamespace\SomeSubFolder;
interface MyInterface {
public function method1();
}
Run Code Online (Sandbox Code Playgroud)
我有一个类,在其中一个方法上键入接口...
<?php namespace MyNamespace\SomeSubFolder;
use MyNamespace\SomeSubFolder\MyInterface;
class MyClass {
public function execute(MyInterface $interface)
{
//does some stuff here
}
}
Run Code Online (Sandbox Code Playgroud)
...而我正在尝试测试MyClass.我创建了一个看起来像这样的测试:
public function testExecute()
{
$mock = Mockery::mock('MyNamespace\SomeSubFolder\MyInterface');
$mock->shouldReceive('method1')
->andReturn('foo');
$myClass = new MyClass();
$myClass->execute($mock);
}
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,我收到了消息
'ErrorException:传递给MyClass :: execute的参数1必须是MyNamespace\SomeSubFolder\MyInterface的实例,Mockery_123465456的实例给出....
我不知道为什么.
在测试中我尝试了以下内容:
$this->assertTrue(interface_exists('MyNamespace\SomeSubFolder\MyInterface'));
$this->assertTrue($mock instanceof MyInterface);
Run Code Online (Sandbox Code Playgroud)
并且都返回true,所以看起来好像我已经创建了实现接口的实例,但是当我在类上调用该方法时,它不同意.有任何想法吗???
我试图在一个数组中观察一个变量,该变量使用v-repeat绑定到重复元素,但它似乎不起作用.有一个小提琴在这里
我的HTML看起来像这样
<div id="test">
<div v-repeat="details">
<select v-model="hour">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</div>
<pre>
{{ $data | json }}
</pre>
</div>
Run Code Online (Sandbox Code Playgroud)
和vue js是这样的
new Vue({
el: '#test',
data: {
details: [
{
hour: 2,
changeThis: null
},
{
hour: 3,
changeThis: null
}
],
},
watch: {
'details': function (val, oldVal) {
alert()
},
}
})
Run Code Online (Sandbox Code Playgroud)
与小时属性的绑定工作正常,但我不能让手表开火.我也尝试过深刻:真实但不起作用.如果我将手表定义为
watch: {
'details[0].hour'
Run Code Online (Sandbox Code Playgroud)
然后我可以让它工作,但由于我不知道我将有多少细节,所以我真的不想为每一个做这个.我理想的做法是获取对正在更新的数组项的引用,然后从那里开始.我可以通过添加一个来实现我想要的
v-on="change:someVar(detail)"
Run Code Online (Sandbox Code Playgroud)
选择元素并以这种方式做,但我很好奇为什么我尝试的方法不起作用.
编辑 实际上可以使用深度观察者返回完整的数组作为@kishanterry下面的注释(谢谢你),我在文档中忽略了这种语法.但是它仍然没有给出我希望的解决方案对于
// deep watcher
'c': {
handler: function (val, oldVal) { /* …Run Code Online (Sandbox Code Playgroud)