Error: Unexpected request: GET /src/app/modules/login/resour
Error: Unexpected request: GET /src/app/modules/login/resources/en.json with karma
我在我的应用程序中使用角转换,当编写单元测试时,他们失败了错误
Error: Unexpected request: GET /src/app/modules/login/resources/en.json
No more request expected
这就是我的因果报应。配置如下:
'use strict';
var baseDir = 'client';
module.exports = {
//This is the list of file patterns to load into the browser during testing.
files: [
baseDir + '/src/vendor/angular/angular.js',
baseDir + '/src/vendor/angular-mocks/angular-mocks.js',
baseDir + '/src/vendor/angular-ui-router/release/angular-ui-router.js',
baseDir + '/src/vendor/angular-bootstrap/ui-bootstrap.min.js',
baseDir + '/src/vendor/angular-bootstrap/ui-bootstrap-tpls.min.js',
baseDir + '/src/vendor/angular-translate/angular-translate.js',
baseDir + '/src/vendor/angular-translate-loader-partial/angular-translate-loader-partial.js',
baseDir + '/src/app/modules/home/home.module.js',
baseDir + '/src/app/modules/login/login.module.js',
baseDir + '/src/app/app.js',
baseDir + '/src/app/**/*.js',
baseDir + '/src/app/modules/**/*.html',
baseDir + '/test/unit/**/*.spec.js'
],
//used framework
frameworks: ['jasmine'],
plugins: [
'karma-chrome-launcher',
'karma-phantomjs-launcher',
'karma-jasmine',
'karma-coverage',
'karma-html-reporter',
'karma-mocha-reporter',
'karma-ng-html2js-preprocessor'
],
preprocessors: {
'**/client/src/**/*.js': 'coverage',
'**/client/src/**/*.html': ['ng-html2js']
},
reporters: ['mocha', 'html', 'coverage'],
coverageReporter: {
type: 'html',
dir: baseDir + '/test/unit-results/coverage',
file: 'coverage.html'
},
htmlReporter: {
outputDir: baseDir + '//test/unit-results/html'
},
ngHtml2JsPreprocessor: {
moduleName: 'templates',
cacheIdFromPath : function(filepath) {
return filepath.substr(filepath.indexOf("appname")+8);
}
},
logLevel: 'info',
urlRoot: '/__test/',
//used browsers (overriding in some gulp task)
browsers: ['PhantomJS']
};
我已经尝试了一些解决方案,如将angular-translate添加到新的.js文件而不是app.js文件,然后在karma.config.js中排除该文件。这里也是我的测试的简短代码。也许我可以忽略这个en。Json文件还是?
/* jshint undef:false*/
(function() {
'use strict';
describe('LoginCtrl', function() {
var loginController, rootScope, q, state, mockLoginService, mockSessionService, scope;
var mockupUser = {username: 'Test', password: 'Test1'};
var mockupBadUser = {username: 'Test', password: 'Test123'};
beforeEach(module('app'));
beforeEach(module('login'));
beforeEach(inject(function($rootScope, $controller, $q, $state, _LoginService_, _SessionService_) {
rootScope = $rootScope;
scope = rootScope.$new();
q = $q;
state = $state;
mockLoginService = _LoginService_;
mockSessionService = _SessionService_;
//spyOn(mockLoginService , 'userLogin').and.returnValue(q.when({}));
loginController = $controller('LoginCtrl as loginvm', {
$scope : scope,
mockLoginService : _LoginService_,
mockSessionService : _SessionService_
});
}));
describe('loginUser with good credentials',function(){
beforeEach(function(){
spyOn(mockLoginService , 'userLogin').and.callFake(function(mockupUser) {
var deferred = q.defer();
if (mockupUser.username === "Test" && mockupUser.password === "Test1") {
deferred.resolve(mockupUser);
}
else {
deferred.reject();
}
return deferred.promise;
});
spyOn(state, 'go');
spyOn(mockSessionService, 'setUser');
});
it("should call loginUser from LoginService with good credentials", function() {
var expectedState = 'root.home';
loginController.loginUser(mockupUser);
rootScope.$digest();
expect(mockLoginService.userLogin).toHaveBeenCalledWith(mockupUser);
expect(mockSessionService.setUser).toHaveBeenCalled();
expect(state.go).toHaveBeenCalledWith(expectedState);
});
});
describe('loginUser with bad credentials',function(){
beforeEach(function(){
spyOn(mockLoginService , 'userLogin').and.callFake(function(mockupBadUser) {
var deferred = q.defer();
deferred.reject();
return deferred.promise;
});
});
it("should call loginUser from LoginService with bad credentials", function() {
loginController.loginUser();
rootScope.$digest();
expect(mockLoginService.userLogin).toHaveBeenCalled();
});
});
});
})();
Zakaria答案更新
beforeEach(function(){
var $injector, $httpBackend;
$injector = angular.injector (['ngMock']);
$httpBackend = $injector.get ('$httpBackend');
$httpBackend.whenGET("/src/app/modules/home/resources/en.json").respond({ title: 'Title' });
$httpBackend.whenGET("/src/app/modules/login/resources/en.json").respond({ title: 'Title' });
});
describe('HomeCtrl', function() {
var homeController, rootScope, q, state, mockDataService, mockSessionService, scope, modal;
var mockupUsers = [....
我试着添加一个测试,他们仍然失败…唯一有效的解决方案是,如我之前所说,添加这两行:
$httpBackend.whenGET("/src/app/modules/home/resources/en.json").respond({ title: 'Title' });
$httpBackend.whenGET("/src/app/modules/login/resources/en.json").respond({ title: 'Title' });
在每个单元测试....我还试着在karma.config中添加了这些代码:
baseDir + '/test/unit/**/*.spec.js',
{
pattern: baseDir + '/src/app/modules/**/*.json',
included: false,
served: true
],
您可以使用$httpBackend
服务来提供模拟翻译文件:
$httpBackend.whenGET("/src/app/modules/login/resources/en.json").respond({ title: 'Title' });
编辑为了避免重复你的beforeEach
es(因为你的$httpBackend.whenGET
应该出现在那里),你可以参考这篇解决测试重复问题的文章。
经过几个小时的搜索和尝试,我找到了一个…在单元测试中注册模块时添加以下代码:
beforeEach(module('myApp', function ($provide, $translateProvider) {
$provide.factory('customLoader', function ($q) {
return function () {
var deferred = $q.defer();
deferred.resolve({});
return deferred.promise;
};
});
$translateProvider.useLoader('customLoader');
}));
https://angular-translate.github.io/docs//指导/22 _unit-testing-with-angular-translate
相关文章:
- FB.login访问令牌facebook javascript SDK
- FB.login Invalid redirect_uri (xd_proxy.php)
- 正在获取错误:'没有找到monkeyID为“”的按钮;LOGIN”;记录
- openFB Facebook Login Javascript
- FB.login有效,但弹出窗口不起作用;t关闭
- 我一直在获取angularjs服务不是函数错误(LoginService.login不是函数)
- Facebook Login For Rest Api
- ng-token-auth redirct to login page when auth:invalid
- Evernote OAuth Login Javascript
- 火狐插件错误:在 resource://gre/modules/commonjs/http.js 找不到模块“路径”
- Schema.pre in Mongoose modules (NodeJS)
- Dynamic about: URLs using JavaScript Code Modules (XPCOMUtil
- Casperjs Google Login 不起作用
- FB.login总是问我的密码(即使我已经登录)
- Ajax and php login
- facebook login API: TypeError in all.js:95
- 无法从 facebook javascript login API 获取用户 ID
- fb.login 响应始终返回 true
- fb.login 在后台运行对话框
- Error: Unexpected request: GET /src/app/modules/login/resour