小编Coo*_*aar的帖子

使用Mockery在PHP中模拟接口时出错

我在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,所以看起来好像我已经创建了实现接口的实例,但是当我在类上调用该方法时,它不同意.有任何想法吗???

php laravel mockery

7
推荐指数
2
解决办法
4349
查看次数

vue.js在v-repeat中监视数组变量

我试图在一个数组中观察一个变量,该变量使用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)

javascript vue.js

5
推荐指数
1
解决办法
2131
查看次数

标签 统计

javascript ×1

laravel ×1

mockery ×1

php ×1

vue.js ×1