0
私はこのtutorialに基づいて角度1.5コンポーネントの単体テストを書こうとしています。
import notificationBannerTemplate from 'app/components/notification-banner/notification-banner.html';
const notificationBanner = {
templateUrl: notificationBannerTemplate,
controller: notificationBannerController,
bindings: {
user: '<notificationBannerUser',
onNotificationClick: '<notificationBannerOnNotificationClick',
},
};
notificationBanner.$inject = ['$state'];
function notificationBannerController($state) {
const ctrl = this;
ctrl.$onInit = function() {
ctrl.goToProfile = goToProfile;
};
function goToProfile() {
ctrl.onNotificationClick();
$state.go('app.profile.settings');
}
}
export default notificationBanner;
そして、私のテストでは、次のようになります。
import unitHelpers from 'test/unit/unit-helpers.js';
describe('notificationBanner component',() => {
let parentScope;
let element;
let state;
const $stateMock = {};
beforeEach(() => {
angular.mock.module(($provide) => {
$provide.value('$state', $stateMock);
});
});
beforeEach(angular.mock.module('CustomerComponentsModule'));
beforeEach(inject(($compile, $rootScope) => {
parentScope = $rootScope.$new();
state = jasmine.createSpyObj('$state', ['go']);
parentScope.user = {
email: '[email protected]',
};
parentScope.closeBanner = function() {
};
element = angular.element(
`<notification-banner
notification-banner-user="user"
notification-banner-on-notification-click="closeBanner">
</notification-banner>`);
$compile(element)(parentScope);
parentScope.$digest();
}));
it('should call the goToProfile function when the button is clicked',() => {
const componentElement = unitHelpers.findByTestId(element, 'bounced-email-banner--button');
componentElement.click();
expect(state.go).toHaveBeenCalledWith('app.profile.settings');
});
});
私は私がオンライン読んだから、いくつかの異なるものを試してみたが、私は私のテストを実行するたびに、私はエラーを取得するTypeError: undefined is not a constructor (evaluating '$state.go('app.profile.settings')')
これはどのようにテストできますか?
でテストすることができました。 beforeMachでモックがリフレッシュされるはずなので、 '$ stateMock'は' let'または 'var'でなければなりません。 – estus