在使用Yeoman开发的应用程序上编写Karma测试

时间:2018-04-23 18:41:06

标签: angularjs jasmine karma-runner yeoman

我正在研究一个使用Yeoman搭建脚手架的角应用程序。发生器配置了Karma / Jasmine,主控制器上有一个测试文件。我已经在主控制器中用我的应用程序所需的代码编写了代码。现在,我正在尝试使用生成的测试文件为我的代码编写测试,并且我遇到了问题。

这是我的main.controller.js(专注于一个功能)

(function () {
    "use strict";

    angular
        .module("myApp")
        .controller("MainController", function($log) {

        var vm = this;

        function calculateWorkspaceTabsWidth() {
            vm.workspaceWidth = {
                "width": 70 / vm.workspaces.length + "%"
        };

    });
})();

这是我的main.controller.spec.js(仅针对上述函数编写)

(function () {
    "use strict";

    describe('MainController', function () {

    var vm;

    beforeEach(module('myApp'));
    beforeEach(function (_$controller_) {
        vm = _$controller_('MainController');
        vm.workspaces = ["One", "Two", "Three", "Four", "Five"];
    });

    it('should be a percentage', function () {
        vm.calculateWorkspaceTabsWidth();
        expect(vm.workspaceStyle.width).toEqual('14%');
    });

    });
})();

这是我在运行此测试时收到的错误消息。

  

TypeError:' undefined'不是一个对象(评估   ' vm.calculateWorkspaceTabsWidth&#39)

我做错了什么?

另外,如果此功能在范围内,我将如何以不同方式编写测试用例? (即:vm.calculateWorkspaceTabsWidth = function(){})

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的calculateWorkspaceTabsWidth不在范围内,应为

    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\post;
use App\comment;
use Auth;

class commentController extends Controller
{
    public function index(post $post)
    {
        return response()->json($post->comments()->with('user')->latest()->get());
    }

    public function store(Request $request, post $post)
    {
        $comment = $post->comments()->create([
            'body' => $request->body,
            'user_id' => Auth::id()
        ]); 

        $comment = comment::where('id', $comment->id)->with('user')->first();

        return $comment->toJson();
    }
}

而不是

  vm.calculateWorkspaceTabsWidth(){} 

在您的控制器中。