测试休息呼叫与业力和角度

时间:2015-08-25 15:46:16

标签: angularjs unit-testing karma-jasmine

我正试图用业力和茉莉来测试我的角度休息。对于初学者我只想测试我的Auth服务并进行简单的登录。

describe('Auth Service', function () {
    var httpBackend,
        service;

    beforeEach(function () {
        angular.mock.module('mean');

        inject(function ($httpBackend, Auth) {
            httpBackend = $httpBackend;
            httpBackend.expect('POST', '/auth/v1/login', { email: 'my@email.com', password : 'password' }).respond({
                response: {
                    success: true
                }
            });

            service = Auth;
        });
    });

    it('should login.', function () {
        var result;

        service.login('my@email.com', 'password').then(function (response) {
            result = response;
        });

        httpBackend.flush();
        // TODO
    });
});

我知道这段代码不会按原样运行,但不幸的是我甚至没有检查其余的调用是否正确执行。我得到以下异常:

Error: Unexpected request: GET internationalization/locale-en.json
Expected POST /auth/login

locale-en.json是我的国际化文件之一,我在此测试中的任何地方都没有引用(甚至在Auth服务中)。

这是Auth服务中的登录功能的实现:

function login(email, password) {
    var deferred = $q.defer();
    $http.post('/auth/v1/login', {email: email, password: password})
        .success(function (t) {
            $localStorage.token = t;
            deferred.resolve(t);
        })
        .error(function (err) {
            deferred.reject(err);
        });

    return deferred.promise;
}

看似随机的GET对json的调用来自哪里,我在这里做错了什么?

编辑我的karma.conf.js

module.exports = function (config) {
config.set({
    basePath: '',
    frameworks: ['jasmine',/* 'requirejs',*/ 'browserify'],

    plugins: [
        //'karma-requirejs',
        'karma-jasmine',
        'karma-browserify',
        'karma-chrome-launcher'
    ],

    files: [
         'public/bower_components/angular.js'
         // other bower_components
        'node_modules/requirejs/require.js',
        'node_modules/karma-requirejs/lib/adapter.js',

        'public/app.js',
        'public/config/*.js',
        'public/controllers/**/*.js',
        // services, directives, filters, internationalization just like the ctrl's
        'public/tests/*.js'
    },
    exclude: [],
    preprocessors: {
        'public/tests/*.js': [ 'browserify' ]
    },
    // the rest is standard karma config

}) };

我评论了require.js,因为我总是得到错误

http://requirejs.org/docs/errors.html#mismatch
  at /home/markus/git/dealscreening/node_modules/requirejs/require.js:140

我似乎无法修复。我还为require.js添加了一个test-main.js文件(否则我根本无法运行karma测试)

var tests = [];
for (var file in window.__karma__.files) {
    if (window.__karma__.files.hasOwnProperty(file)) {
        if (/Spec\.js$/.test(file)) {
            tests.push(file);
            console.log('requireJS:', file);
        }
    }
}

requirejs.config({
    baseUrl: '/base',
    paths: {},
    deps: tests,
    callback: window.__karma__.start
});

可能我的因果配置有点错误,不幸的是我真的不知道如何正确配置它,因为我经历过的任何教程似乎都没有在我的项目中工作。

github示例项目:

https://github.com/markus138/karmatest

测试它:

npm install
cd public
bower install
cd ..
npm test

版本: 角1.4.4 业力0.13.9 茉莉花2.3.4

0 个答案:

没有答案